服务治理 Spring Cloud Eureka
服务治理是微服务架构中最为核心和基础的模块,主要用来实现各个微服务实例的自动化注册与发现。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。
- 服务注册
在服务治理框架中通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将端口,版本号,通信协议等附加信息告知注册中心,注册中心按<font color=#FF0000>服务名</font>分类组织服务清单。服务注册中心还需要以心跳方式监测清单中的服务是否可用,不可用则从服务清单中剔除,达到排除故障服务的作用。
- 服务发现
在服务治理框架作用下,服务间的调用不再通过指定具体的实例的地址来实现,而是通过向服务名发起请求调用实现。所以,服务调用方在调用服务提供方接口的时候,并不知道服务实例具体的位置,服务调用方需要向服务注册中心咨询服务,获取所有的服务实例清单,实现对具体服务实例的访问。
1. 搭建服务注册中心(Eureka 服务端)
1.1 服务注册中心搭建
- 创建Spring Boot 工程
- 添加依赖: spring-cloud-starter-eureka-server
- 使用
@EnableEurekaServer
开启服务注册中心
- 配置服务注册中心
1.2 服务注册中心配置
name |
description |
value |
spring.application.name |
服务名 |
- |
server.port |
端口 |
- |
eureka.instance.hostname |
主机名称 |
- |
eureka.client.register-with-eureka |
是否向注册中心注册自己 |
false |
eureka.client.fetch-registry |
是否需要检索服务 |
false |
eureka.client.service-url.defaultZone |
服务注册中心地址 |
http://{server.port}/eureka/ |
2. 注册服务提供者(Eureka 客户端)
2.1 服务提供者注册
- 创建Spring Boot 工程
- 添加依赖: spring-cloud-starter-eureka-client
- 使用
@EnableDiscoveryClient
激活 discovery client
- 配置服务提供者
2.2 服务提供者配置
name |
description |
value |
spring.application.name |
服务名 |
- |
server.port |
端口 |
- |
eureka.client.service-url.defaultZone |
服务注册中心地址 |
- |
3. 注册服务消费者(Eureka 客户端)
3.1 服务消费者注册
- 创建Spring Boot 工程
- 添加依赖: spring-cloud-starter-eureka-client, spring-cloud-starter-ribbon
- 使用
@EnableDiscoveryClient
激活 discovery client,在主类中创建RestTemplate的Spring Bean实例,并通过@LoadBalanced
注解开启客户端负载均衡
- 配置服务提供者
3.2 服务消费者配置
name |
description |
value |
spring.application.name |
服务名 |
- |
server.port |
端口 |
- |
eureka.client.service-url.defaultZone |
服务注册中心地址 |
- |
4. 高可用服务注册中心
在分布式环境中,需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,对于服务中心也一样。在 Eureka 的服务治理设计中,<font color=#FF0000>所有节点既是服务提供方也是服务消费方</font>,服务注册中心也不例外。<font color=#FF0000>Eureka Server 高可用实际上就是将自己作为服务向其它服务注册中心注册自己,形成一组互相注册的注册中心</font>,实现服务清单互相同步,达到高可用效果。
4.1 高可用服务注册中心配置
name |
description |
value |
spring.application.name |
服务名 |
- |
server.port |
端口 |
- |
eureka.instance.hostname |
主机名称 |
- |
eureka.client.service-url.defaultZone |
服务注册中心地址 |
其它服务注册中心地址: url2,url3... |
4.2 服务提供方配置
name |
description |
value |
spring.application.name |
服务名 |
- |
server.port |
端口 |
- |
eureka.client.service-url.defaultZone |
服务注册中心地址 |
其它服务注册中心地址: url1,url2,url3... |
附. 常用配置
name |
description |
default |
spring.application.name |
服务名 |
- |
server.port |
端口 |
- |
eureka.instance.hostname |
主机名称 |
- |
eureka.instance.lease-renewal-interval-in-seconds |
服务续约任务的调用间隔时间 |
30 |
eureka.instance.lease-expiration-duration-in-seconds |
服务失效时间 |
90 |
eureka.client.register-with-eureka |
是否向注册中心注册自己 |
true |
eureka.client.fetch-registry |
是否需要检索服务 |
true |
eureka.client.service-url.defaultZone |
eureka server 分区地址 |
- |
eureka.server.enable-self-preservation |
是否开启保护机制 |
- |
网友评论