SpringCloud升级之路2020.0.x版-18.Eureka的客户端核心设计和配置

SpringCloud升级之路2020.0.x版-18.Eureka的客户端核心设计和配置

本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford

image

Eureka 客户端配置就是访问 Eureka Server 的客户端相关配置,包括 Eureka Server 地址的配置,拉取服务实例信息相关配置,当前实例注册相关配置和 http 连接相关配置。在 Spring Cloud 中,Eureka 客户端配置以 eureka.client 开头,对应配置类为 EurekaClientConfigBean

其中,Eureka 客户端有三个比较重要的定时任务,以及相关配置,这里用图的方式给大家展示出来了:

读取服务实例相关流程

image

定时检查实例信息以及实例状态并同步到 Eureka Server

image

定时心跳相关流程

image

image

可以直接指定 Eureka Server 的地址,并且,这些配置可以动态修改,并且可以配置刷新时间。例如:

eureka: client: service-url: # 默认eureka集群,这里必须是defaultZone,不能用-替换大写,与其他的配置不一样,因为实在EurekaClientConfigBean里面写死的 defaultZone: :8211/eureka/ zone1: :8212/eureka/ zone2: :8213/eureka/ zone3: :8214/eureka/ # 如果上面 eureka server 地址相关配置更新了,多久之后会重新读取感知到 eureka-service-url-poll-interval-seconds: 300

也可以通过 DNS 获取 Eureka Server,例如:

eureka: client: # 是否使用 dns 获取,如果指定了则通过下面的 dns 配置获取,而不是上面的 service-url use-dns-for-fetching-service-urls: true # dns 配置 # eureka-server-d-n-s-name: eureka.com # dns 配置的 eureka server 的 port # eureka-server-port: 80 # dns 配置的 eureka server 的 port 后面的 uri 前缀 context # eureka-server-u-r-l-context: /eureka

同时,可能有不同的 Eureka Server 部署在不同的可用区域(zone)上,这里也可以配置 Eureka Client 的 zone 配置:

eureka: client: # 可用区列表,key 为 region,value 为 zone availability-zones: region1: zone1, zone2 region2: zone3 # 所在区域,通过这个读取 availability-zones 获取 zone,然后通过 zone 读取 service-url 获取对应的 eureka url # 这里的逻辑对应的类是 ConfigClusterResolver 和 ZoneAffinityClusterResolver region: region1 # 如果设置为 true,则同一个 zone 下的 eureka 会跑到前面优先访问。默认为 true prefer-same-zone-eureka: true

image

我们可以配置是否从 Eureka 上面拉取服务实例信息,一般本地测试的时候,可能我们不想使用 Eureka 上面的注册实例的信息,就可以通过这个配置禁用 Eureka Client 从 Eureka 上面获取微服务实例信息。

eureka: client: # 是否从 eureka 上面拉取实例 fetch-registry: true

拉取服务实例信息的请求,也是可以配置是拉取压缩信息还是完整信息,以及是否通过增量拉取获取实例信息。Eureka 增量拉取机制实现很简单,就是新注册或者淘汰的实例会放入最近修改队列,队列中的信息会作为增量拉取的响应返回。增量拉取可能会丢失某些实例的更新,但是节省网络流量,在网络不好的情况下可以使用增量拉取。增量拉取中有版本控制,如果版本有差异,还是会通过全量拉取,之后再进行增量拉取。

eureka: client: # 是否禁用增量拉取,如果网络条件不好,可以禁用,每次都会拉取全量。增量拉取中有版本控制,如果版本有差异,还是会通过全量拉取,之后再进行增量拉取。 disable-delta: false # 客户端请求头指定服务端返回的实例信息是压缩的信息还是完整信息,默认是完整信息 # full, compact client-data-accept: full # 针对增量拉取,是否每次都日志差异 log-delta-diff: true

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxfpf.html