Spirng Cloud Eureka注册中心知识点(整理)
微服务中存在的问题:
- 服务提供者(provider)URL地址硬编码(服务的url地址和端口变化了)问题?服务提者provider死掉了,消费者consumer怎样才能知道?
Spirng Cloud Eureka使用Netflix Eureka来实现服务注册与发现(服务治理),解决服务提供者url地址硬编码问题。
1.什么是注册中心
注册中心是什么,怎样理解dubbo+zookeeper?
- 我们可以认为注册中心就是:服务管理平台,来管理所有的微服务,治理所有的微服务
- dubbo+zookeeper缺点是:不能确保服务的状态,不能确保服务存在
2.Eureka
2.1架构图
- Eureka服务端(Eureka Server): 服务注册中心
- Eureka客户端(Eureka Client) : 此客户端并不是指服务消费者,只要注册到Eureka注册中心的服务都可以称为Eureka Client
注:上图中ApplicationClient和ApplicationService都可以称为Eureka Client
2.2Eureka Client与Eureka Server交互过程
服务注册(register)
Eureka Client发送REST请求(理解什么是REST请求)
服务续约(renew)
周期性的发送心跳持续通知Eureka Server,续约服务,确保服务一直处于可用状态防止被剔除
#续约间隔时间,默认30秒
eureka.instance.lease-renewal-interval-in-seconds: 30
获取服务列表(get registry)
#每隔30秒获取服务中心列表(只读备份)
eureka.client.registry-fetch-interval-seconds: 30
服务调用
消费者收到服务清单(服务列表)后,根据清单中的服务,查找该服务的地址
服务下线(cancel)
Eureka Client提前发送REST请求给Eureka Server,告诉Euraka Server自己要下线了
失效剔除(evict)
网络故障等原因,导致Eureka Client不能提供服务,无法给Eureka Server发送下线请求,因此需要有剔除机制。
- 服务超过90秒(默认)没有续约,会被剔除
- Eureka Server每隔60秒(默认)会剔除一次
#租约到期,服务时效时间,默认值90秒
eureka.instance.lease-expiration-duration-in-seconds: 90
剔除时间可以是(90秒到150秒的一个范围)
自我保护
当在短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制。在该机制下,Eureka Server不会剔除任何的微服务,等到正常后,在退出自我保护机制。
#向Eureka服务中心集群注册服务
eureka.server.enable-self-preservation: false # 关闭自我保护模式(默认值是打开)
Eureka会统计服务实例最近15分钟心跳续约的比例是否低于85%,如果低于则会触发自我保护机制。
3.Eureka的配置整理
application.properties配置整理:
- eureka_server模块的配置:
# 端口
server.port: 10086
# 应用名称,会在Eureka中作为服务的id标识(serviceId)
spring.application.name: eureka-server
# EurekaServer的地址,现在是本地IP,如果是集群,需要写其它Server的地址。
eureka.client.service-url.defaultZone: http://127.0.0.1:10086/eureka
# 是否抓取注册列表,可以关闭
eureka.client.fetch-registry: false
# 是否注册服务中心Eureka,eureka_server不需要注册到Eureka
eureka.client.register-with-eureka: false
- provider_service模块的配置:
# 应用名称
spring.application.name: provider-service
# 注册中心地址
eureka.client.service-url.defaultZone: http://127.0.0.1:10086/eureka
- consumer_service模块的配置:
# 应用名称
spring.application.name: consumer-service
# 注册中心地址
eureka.client.service-url.defaultZone: http://127.0.0.1:10086/eureka
java代码这块省略。
可以通过:http://127.0.0.1:10086/来查看服务状态