Eureka Detail
服务提供者相关配置及注意事项:
1.服务注册
服务提供者通过rest发送请求将自己注册到eureka server上,同时带上自身服务的元数据。eureka server接收rest,将数据储存在一个双层的中,第一层key是服务名,第二层key是具体服务的名称。
切记eureka.client.register-with-eureka=true
当为true时开启注册
2.服务同步
集群化部署的时候,由于注册中心互相注册,此时注册在一个注册中心中的集群也会注册到其他同步注册到集群其他中心。
3.服务续约
注册完服务之后,服务提供者会维护一个心跳来持续告诉eureka,我还活着,用来防止eureke剔除任务。
相关配置如下:
eureka.instance.lease-renewal-interval-in-seconds=30 用于定义服务续约调用间隔时间,默认为30s
eureka.instance.lease-expiration-duration-in-seconds=90 用于定于服务失效时间,默认为90s
服务消费者:
1.获取服务
eureka server会维护默认值为30s更新一次的服务提供者清单,当 消费者启动的时候,会发送一个rest请求来获取。
2.服务调用
eureka中有region和zone的概念,一个region下有多个zone。服务消费者会优先选取同region同zone下的服务。
3.服务下线
当一个服务关闭或者重启某服务时,它会触发一个rest请求给eureka server,告诉服务注册中心“我下线了”。注册中心收到后将该服务下线,并且将改时间广播出去。
服务注册中心:
1.失效剔除
服务注册中心会维护一个定时任务。默认60s将当前清单超时默认为90s未续约的服务剔除。
2.自我保护
当服务注册量低于85%,会触发eureka自我保护,作用是尽量保持服务不被失效剔除。
源码解析:
@EnableDiscoveryCilent
1.对于eureka注册中心列表的维护
- 通过getRegion函数,从配置中读取一个region返回,若是为空则默认default。通过eureka.cilent.region属性来定义。
- 通过getAvailabilityZones函数,这也就是eureka.serviceUrl.defaultZone的由来,如若配置则通过eureka.client.availability-zones属性来分隔配置,多个url可用逗号进行分隔。
- 最后通过getEurekaServerServiceUrls来获取所有的url
2.服务注册源码
通过构造函数找到initScheduledTask,查看其中的register()方法,发现发送了一个rest的http请求到注册中心,元数据类型为instanceinfo。
由于可提供服务,同时也是可以注册。由服务注册必然有服务续约。
服务的续约,则会创建一个定时器按照上文配置时间去,发送心跳。