关于spring-cloud:SpringCloud升级之路20200x版18Eureka的客户端核心设计和配置

8次阅读

共计 4169 个字符,预计需要花费 11 分钟才能阅读完成。

本系列代码地址:https://github.com/HashZhang/…

Eureka 客户端配置就是拜访 Eureka Server 的客户端相干配置,包含 Eureka Server 地址的配置,拉取服务实例信息相干配置,以后实例注册相干配置和 http 连贯相干配置。在 Spring Cloud 中,Eureka 客户端配置以 eureka.client 结尾,对应配置类为 EurekaClientConfigBean

其中,Eureka 客户端有三个比拟重要的定时工作,以及相干配置,这里用图的形式给大家展现进去了:

读取服务实例相干流程

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

定时心跳相干流程

能够间接指定 Eureka Server 的地址,并且,这些配置能够动静批改,并且能够配置刷新工夫。例如:

eureka:
    client:
      service-url:
        # 默认 eureka 集群, 这里必须是 defaultZone,不能用 - 替换大写,与其余的配置不一样,因为切实 EurekaClientConfigBean 外面写死的
        defaultZone: http://127.0.0.1:8211/eureka/
        zone1: http://127.0.0.1:8212/eureka/
        zone2: http://127.0.0.1:8213/eureka/
        zone3: http://127.0.0.1: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

咱们能够配置是否从 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

拉取后的实例会被保留到本地缓存中,本地缓存具备过期工夫:

eureka:
    client:
      # eureka client 刷新本地缓存工夫
      # 默认 30s
      registry-fetch-interval-seconds: 5
      # 只保留状态为 UP 的实例,默认为 true
      filter-only-up-instances: true
      # eureka client 刷新本地缓存 (定时拉取 eureka 实例列表) 线程池大小,默认为 2
      cache-refresh-executor-thread-pool-size: 2
      # eureka client 刷新本地缓存 (定时拉取 eureka 实例列表) 线程池工作最大延迟时间,这个配置是定时拉取工作提早 (registry-fetch-interval-seconds) 的倍数,默认 10 倍
      cache-refresh-executor-exponential-back-off-bound: 10

同时,在 Spring Cloud 环境中,只有是基于 spring-cloud-commons 的微服务实现(其实所有 Spring Cloud 实现都是基于这个实现的),服务发现的 Client:DiscoveryClient(同步环境)与 ReactiveDiscoveryClient(异步环境)都是应用的 Composite 的实现,也就是外部有多种服务发现 Client,服务发现依照肯定顺序调用每一个服务发现 Client,这里也能够配置 Eureka Client 的程序。

eureka:
    client:
      #在 spring cloud 环境中,DiscoveryClient 用的其实都是 CompositeDiscoveryClient,这个 CompositeDiscoveryClient 逻辑其实就是多个 DiscoveryClient 共存,先拜访一个,没找到就通过下一个寻找
      #这个 order 决定了程序,默认为 0
      order: 0

咱们在本地测试的时候,可能不想将本地这个实例注册到 Eureka Server 下面,这也是能够配置的:

eureka:
    client:
      # 是否将本人注册到 eureka 下面
      register-with-eureka: true

同时,Eureka 自身的设计中,Eureka 实例信息以及配置是能够扭转的,那么多久会同步到 Eureka Server 上呢?留神这个和心跳申请不一样,这个是能够独自配置的:

eureka:
    client:
      # 实例信息同定时同步到 Eureka Server 的间隔时间。每隔这么长时间,查看实例信息(即 eureka.instance 配置信息)是否发生变化,如果发生变化,则同步到 Eureka Server,默认 30s
      # 次要查看两类信息,别离是服务地址相干信息,以及服务过期工夫与刷新工夫配置信息
      instance-info-replication-interval-seconds: 30
      # 实例信息同定时同步到 Eureka Server 的初始延迟时间,默认 40s
      initial-instance-info-replication-interval-seconds: 40

还有一些其余配置咱们可能也用的到:

eureka:
    client:
      # 是否在初始化的时候就注册到 eureka,个别设置为 false,因为实例还不能失常提供服务
      should-enforce-registration-at-init: false
      # 是否在敞开的时候登记实例,默认为 true
      should-unregister-on-shutdown: true
      # 是否对于实例状态扭转更新进行限流,默认为 true
      on-demand-update-status-change: true

Eureka Client 基于 Http 申请获取服务实例信息,这里能够针对 Http 客户端进行配置:

eureka:
    client:
      # 代理相干配置
      # proxy-host:
      # proxy-port:
      # proxy-user-name:
      # proxy-password:
      # 是否对于发往 Eureka Server 的 http 申请启用 gzip,目前曾经过期了,只有 Eureka Server 启用了 gzip,申请就是 gzip 压缩的
      g-zip-content: true
      # httpclient 的链接超时,默认 5s
      eureka-server-connect-timeout-seconds: 5
      # httpclient 的读取超时,默认 5s
      eureka-server-read-timeout-seconds: 8
      # httpclient 的闲暇连贯超时,默认 30s
      eureka-connection-idle-timeout-seconds: 30
      # httpclient 的总连贯数量,默认 200
      eureka-server-total-connections: 200
      # httpclient 的每个 host 的连贯数量
      eureka-server-total-connections-per-host: 50
      # tls 相干配置,默认没有启用
#      tls:
#        enabled: false
#        key-password:
#        key-store:
#        key-store-password:
#        key-store-type:
#        trust-store:
#        trust-store-password:
#        trust-store-type:

咱们这一节详细分析了 Eureka 的客户端配置。下一节,咱们将开始剖析 Eureka Server 相干的配置。

微信搜寻“我的编程喵”关注公众号,每日一刷,轻松晋升技术,斩获各种 offer

正文完
 0