代码改变世界

基于Spring Boot 2.0.3的Spring Cloud Eureka Server与Client

2018-06-30 12:51  Jeff Ma  阅读(6538)  评论(0编辑  收藏  举报

springBootVersion = '2.0.3.RELEASE'

springCloudVersion = 'Finchley.RELEASE'

1、服务发现和服务注册

服务发现:如何提供给客户端一个可用的服务?客户端自己找,还是服务器端帮它找。
● 客户端发现:客户端查询服务注册表,然后使用负载均衡算法从中选择一个实例,并发出请求。
● 服务器端发现:客户端通过负载均衡器向某个服务提出请求,负载均衡器查询服务注册表,并将请求转发到可用的服务实例。
服务注册:
● 自注册:服务实例自己注册
● 第三方注册模式:服务注册器会通过查询部署环境或订阅事件的方式来跟踪运行实例的更改。一旦侦测到有新的可用服务实例,会向注册表注册此服务。服务管理器也负责注销终止的服务实例。

2、Region和Zone

Region:根据地理位置我们把某个地区的基础设施服务集合称为一个区域。通过AWS的区域,一方面可以使得AWS云服务在地理位置上更加靠近我们的用户,另一方面使得用户可以选择不同的区域存储他们的数据以满足当地法规遵循方面的要求。
Availability Zone:AWS的每个区域一般由多个可用区(AZ)组成,而一个可用区一般是由多个数据中心组成。AWS引入可用区设计主要是为了提升用户应用程序的高可用性。因为可用区与可用区之间在设计上是相互独立的,也就是说它们会有独立的供电、独立的网络等,这样假如一个可用区出现问题时也不会影响另外的可用区。

感觉是容灾备份的概念,比如某公司在北京有两个机房,一个在亦庄,一个在上地,每个机房都有一个Eureka Server,这两个Eureka Server的Region和Zone的配置

Eureka Server1

Region:beijing     

Zone:yizhuang

Eureka Server2

Region:beijing

Zone:shangdi

3、Eureka架构

4、Eureka 实战

【最简单的Eureka Server】
1)主类
@EnableEurekaServer
2)application.yml (Standalone Eureka Server)

server: 
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

在浏览器中输入http://localhost:8761/

3)依赖
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server')

如果gradle找不到Eureka的包,在build.gradle中添加如下内容
原因:Due to Gradle’s dependency resolution rules and the lack of a parent bom feature

ext {
  springCloudVersion = 'Finchley.RELEASE'
}

dependencyManagement {
  imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
  }
}

 

 

【注册服务到Eureka Sever】
1)主类
@EnableEurekaClient
@EnableDiscoveryClient 更通用,不限于Eureka
2.0 不需要加这个注解,只要类路径下有spring-cloud-starter-netflix-eureka-client。

2)application.yml 

spring:
  application:
    name: user-service
eureka:
   client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

3)依赖

compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
如果gradle找不到Eureka的包,Due to Gradle’s dependency resolution rules and the lack of a parent bom feature

参见Eureka Server中build.gradle的相关配置。