溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Eureka作為注冊(cè)中心

發(fā)布時(shí)間:2021-10-11 17:21:47 來源:億速云 閱讀:150 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“如何使用Eureka作為注冊(cè)中心”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Eureka 目前的狀態(tài):Eureka 目前 1.x 版本還在更新,但是應(yīng)該不會(huì)更新新的功能了,只是對(duì)現(xiàn)有功能進(jìn)行維護(hù),升級(jí)并兼容所需的依賴。 Eureka 2.x 已經(jīng)胎死腹中了。但是,這也不代表 Eureka 就是不能用了。如果你需要一個(gè)簡(jiǎn)便易于部署的注冊(cè)中心,Eureka 還是一個(gè)很好的選擇。云服務(wù)環(huán)境中,基本上所有實(shí)例地址和微服務(wù)名稱都在不斷變化,也并不太需要 Eureka 所缺少的持久化特性。當(dāng)你的集群屬于中小規(guī)模的時(shí)候(節(jié)點(diǎn)小于 1000 個(gè)), Eureka 依然是一個(gè)不錯(cuò)的選擇。當(dāng)你的集群很大的時(shí)候,Eureka 的同步機(jī)制可能就限制了他的表現(xiàn)。

Eureka 的設(shè)計(jì)

Eureka 的設(shè)計(jì)比較小巧,沒有復(fù)雜的同步機(jī)制,也沒有復(fù)雜的持久化機(jī)制,集群關(guān)系只是簡(jiǎn)單的將收到的客戶端請(qǐng)求轉(zhuǎn)發(fā)到集群內(nèi)的其他 Eureka 實(shí)例。Eureka 本身也只有注冊(cè)中心的功能,不像其他種類的注冊(cè)中心那樣,將注冊(cè)中心和配置中心合在一起,例如 Consul 和 nacos。

Eureka 的交互流程如下

如何使用Eureka作為注冊(cè)中心

首先,Service A 通過 Eureka Client 發(fā)送注冊(cè)請(qǐng)求(Register)到同一可用區(qū)的 Eureka Server 1。之后通過發(fā)送心跳請(qǐng)求(Renew)到這個(gè) Eureka Server 1. Eureka Server 1 收到這些請(qǐng)求的時(shí)候,會(huì)處理這些請(qǐng)求并將這些請(qǐng)求轉(zhuǎn)發(fā)到其他的集群內(nèi)的 Eureka Server 2 和 Eureka Server 3. Eureka Server 2 和 Eureka Server 3 不會(huì)再轉(zhuǎn)發(fā)收到的 Eureka Server 1 轉(zhuǎn)發(fā)過來的請(qǐng)求。然后,Service B 還有 Service C 通過 Eureka 獲取到了 Service A 的位置,最后調(diào)用了 Service A。

對(duì)于本地沒有查詢到的微服務(wù),Eureka Server 還會(huì)從遠(yuǎn)程 Region 的 Eureka Server 去獲取,例如這里對(duì)于 Service D,本地沒有查到,Eureka Server 會(huì)返回遠(yuǎn)程 Region 的 Service D 的實(shí)例。由于本地有 Service A,所以肯定不會(huì)返回遠(yuǎn)程 Region 的 Service A 的實(shí)例。并且,本地是定時(shí)拉取的遠(yuǎn)程 Region 的 Service 列表,并不是每次查詢的時(shí)候現(xiàn)查詢的。

一般的,微服務(wù)之間的互相調(diào)用,并不經(jīng)過 Eureka,也不會(huì)涉及到 Eureka 客戶端了,而是通過負(fù)載均衡器調(diào)用,這個(gè)我們后面就會(huì)提到。

Eureka 相關(guān)概念

這里我們忽略所有的 AWS 相關(guān)的術(shù)語以及配置還有相關(guān)邏輯處理。

Eureka 中的術(shù)語:

  1. Eureka 實(shí)例:每個(gè)注冊(cè)到 Eureka 上面的實(shí)例就是 Eureka 實(shí)例。

  2. Eureka 實(shí)例狀態(tài):包括 UP(可以處理請(qǐng)求),DOWN(健康檢查失敗,不能正常處理請(qǐng)求),STARTING(啟動(dòng)中,不能處理請(qǐng)求),OUT_OF_SERVICE(人為下線,暫時(shí)不處理請(qǐng)求),UNKNOWN(未知狀態(tài))。

  3. Eureka 服務(wù)器:作為注冊(cè)中心運(yùn)行,主要提供實(shí)例管理功能(處理實(shí)例注冊(cè)(register)請(qǐng)求、處理實(shí)例注銷(cancel)請(qǐng)求、處理實(shí)例心跳(renew)請(qǐng)求、內(nèi)部處理實(shí)例過期(evict))、實(shí)例查詢功能(各種查詢實(shí)例信息的接口,例如通過 AppName 獲取實(shí)例列表,通過實(shí)例 id 獲取實(shí)例信息等等)

  4. Eureka 服務(wù)器集群:Eureka 服務(wù)器的集群,每個(gè) Eureka 服務(wù)器都配置了區(qū)域以及可用區(qū),Eureka 服務(wù)器收到的客戶端請(qǐng)求會(huì)轉(zhuǎn)發(fā)到同一區(qū)域內(nèi)的其他 Eureka 服務(wù)器,可以配置優(yōu)先發(fā)到同一可用區(qū)的 Eureka 服務(wù)器。非同一區(qū)域內(nèi) Eureka 服務(wù)器,通過定時(shí)拉取的方式進(jìn)行同步。

  5. Eureka 客戶端:請(qǐng)求 Eureka 服務(wù)器的客戶端。封裝發(fā)送實(shí)例注冊(cè)(register)請(qǐng)求、實(shí)例注銷(cancel)請(qǐng)求和實(shí)例心跳(renew)請(qǐng)求。

  6. VIP(或者是 Virtual Hostname): Eureka 中可以通過兩種方式獲取實(shí)例,一個(gè)是通過服務(wù)名稱,另一種是通過 VIP。每個(gè)實(shí)例都有服務(wù)名稱,以及 VIP。Eureka 服務(wù)器中的索引方式是以服務(wù)名稱為 key 的索引,我們也可以通過遍歷所有實(shí)例信息的方式通過 VIP 字符串匹配獲取相關(guān)的實(shí)例。在 Spring Cloud 體系中,一個(gè)實(shí)例的 VIP、SVIP(其實(shí)就是 Secure VIP,即 https 的地址)以及服務(wù)名稱都是 spring.application.name 指定的服務(wù)名稱。

Eureka 相關(guān)配置

  1. Eureka 實(shí)例配置:Eureka 實(shí)例,每個(gè)注冊(cè)到 Eureka 上面的實(shí)例就是 Eureka 實(shí)例。Eureka 實(shí)例包含以下元素,以及相關(guān)配置:

  2. 基本信息:包括 IP,端口等訪問這個(gè) Eureka 實(shí)例所需的信息:

eureka:
  instance:
    #一般不用我們自己設(shè)置,EurekaInstanceConfigBean 的構(gòu)造器會(huì)通過 InetUtils 獲取 ip 地址
    #ip-address:
    #一般不用我們自己設(shè)置,EurekaInstanceConfigBean 的構(gòu)造器會(huì)通過 InetUtils 獲取 hostname
    #hostname:
    #注冊(cè)到 eureka 上面供其他實(shí)例訪問的地址使用 ip 進(jìn)行注冊(cè),其他實(shí)例會(huì)通過 ip 進(jìn)行訪問
    prefer-ip-address: true
    #不用設(shè)置 non-secure-port,自動(dòng)使用 server.port 作為 non-secure-port
    #non-secure-port:
    #如果 secure-port-enabled 是 true,則會(huì)自動(dòng)使用 server.port 作為 secure-port;我們一般內(nèi)部調(diào)用不用 ssl,所以不需要配置 secure-port
    #secure-port:
    #默認(rèn)是啟用 non-secure-port 的
    non-secure-port-enabled: true
    #默認(rèn)是不啟用 secure-port 的,我們一般內(nèi)部調(diào)用不用 ssl
    secure-port-enabled: false
    #個(gè)性化的實(shí)例id,包括 ip:微服務(wù)名稱:端口
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
    # app名稱,不填寫在 Spring-cloud-netflix 體系下默認(rèn)就是 spring.application.name
    appname: ${spring.application.name}
    #app組名稱歸類用的,目前也沒什么用
    app-group-name: common
    #實(shí)例命名空間,目前也沒什么用
    namespace: public
  1. 基本鏈接信息:包括首頁路徑地址以及健康檢查路徑地址:

eureka:
  instance:
    # 健康檢查地址,默認(rèn)是 /actuator/health
    health-check-url-path: /actuator/health
    # 實(shí)例狀態(tài)地址,默認(rèn)是 /actuator/info
    status-page-url-path: /actuator/info
    # 首頁地址,默認(rèn)是 /
    home-page-url-path: /
  1. 實(shí)例注冊(cè)行為,即實(shí)例注冊(cè)后的行為,以及心跳間隔等配置:

eureka:
  instance:
	  # 服務(wù)過期時(shí)間配置,超過這個(gè)時(shí)間沒有接收到心跳EurekaServer就會(huì)將這個(gè)實(shí)例剔除
    # 注意,EurekaServer一定要設(shè)置eureka.server.eviction-interval-timer-in-ms否則這個(gè)配置無效
    # 這個(gè)配置一般為服務(wù)刷新時(shí)間配置的三倍
    # 默認(rèn)90s
    lease-expiration-duration-in-seconds: 15
    #服務(wù)刷新時(shí)間配置,每隔這個(gè)時(shí)間會(huì)主動(dòng)心跳一次
    #默認(rèn)30s
    lease-renewal-interval-in-seconds: 5
    registry:
      #請(qǐng)參考 wait-time-in-ms-when-sync-empty 配置說明
      default-open-for-traffic-count: 1
      #初始期望發(fā)送心跳請(qǐng)求的實(shí)例個(gè)數(shù),默認(rèn)為1,在有新實(shí)例注冊(cè)的時(shí)候,會(huì) +1,有注銷的時(shí)候會(huì) -1,初始默認(rèn)為 1 一般因?yàn)樽约阂沧?cè)到 eureka 上
      expected-number-of-clients-sending-renews: 1
    #實(shí)例注冊(cè)后是否立刻開始服務(wù),默認(rèn)為 false,一般注冊(cè)后還需要做一些操作,所以注冊(cè)實(shí)例的狀態(tài)是 STARTING。后面改變狀態(tài)后會(huì)更新為 UP
    instance-enabled-onit: false
  1. 實(shí)例元數(shù)據(jù)

eureka:
  instance:
	  #元數(shù)據(jù)map,我們可以自己使用,放一些個(gè)性化的元數(shù)據(jù),目前只有 configPath 和 zone 比較有用。 configPath 是使用 spring-cloud-config 的時(shí)候會(huì)設(shè)置 
    metadata-map:
      # spring cloud 體系中,可用區(qū)的配置放入元數(shù)據(jù)中,key 為 zone
      zone: zone1
  1. Eureka 客戶端配置

  2. Eureka 服務(wù)器地址配置,可以直接指定鏈接,也可以通過 region 和 zone 進(jìn)行配置,也可以通過 DNS 配置:

eureka:
  instance:
    # 可用區(qū)列表,key 為 region,value 為 zone
    availability-zones:
      region1: zone1, zone2
      region2: zone3
    # 所在區(qū)域,通過這個(gè)讀取 availability-zones 獲取 zone,然后通過 zone 讀取 service-url 獲取對(duì)應(yīng)的 eureka url
    # 這里的邏輯對(duì)應(yīng)的類是 ConfigClusterResolver 和 ZoneAffinityClusterResolver
    region: region1
    # key 為 zone,value 為 eureka 鏈接,以逗號(hào)分隔
    service-url:
      # 默認(rèn)eureka集群,這里必須是defaultZone,不能用-替換大寫,與其他的配置不一樣,因?yàn)閷?shí)在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 地址相關(guān)配置更新了,多久之后會(huì)重新讀取感知到
    eureka-service-url-poll-interval-seconds: 300
    # 是否使用 dns 獲取,如果指定了則通過下面的 dns 配置獲取,而不是上面的 service-url
    use-dns-for-fetching-service-urls: false
    # dns 配置
    # eureka-server-d-n-s-name:
    # dns 配置的 eureka server 的 port
    # eureka-server-port:
    # dns 配置的 eureka server 的 port 后面的 uri 前綴 context
    # eureka-server-u-r-l-context:
    # 如果設(shè)置為 true,則同一個(gè) zone 下的 eureka 會(huì)跑到前面優(yōu)先訪問。默認(rèn)為 true
    prefer-same-zone-eureka: true
  1. 拉取服務(wù)實(shí)例信息相關(guān)配置

eureka:
  instance:
    # 是否從 eureka 上面拉取實(shí)例
    fetch-registry: true
	  # 如果只想獲取一個(gè)特定 virtual host name 的實(shí)例列表,就配置 registry-refresh-single-vip-address
    #registry-refresh-single-vip-address:
    # 客戶端請(qǐng)求頭指定服務(wù)端返回的實(shí)例信息是壓縮的信息還是完整信息,默認(rèn)是完整信息
    # full, compact
    client-data-accept: full
    # eureka client 刷新本地緩存時(shí)間
    # 默認(rèn)30s
    registry-fetch-interval-seconds: 5
    # eureka client 刷新本地緩存(定時(shí)拉取 eureka 實(shí)例列表)線程池大小,默認(rèn)為 2
    cache-refresh-executor-thread-pool-size: 2
    # eureka client 刷新本地緩存(定時(shí)拉取 eureka 實(shí)例列表)線程池任務(wù)最大延遲時(shí)間,這個(gè)配置是定時(shí)拉取任務(wù)延遲(registry-fetch-interval-seconds)的倍數(shù),默認(rèn) 10 倍
    cache-refresh-executor-exponential-back-off-bound: 10
    # 是否禁用增量拉取,如果網(wǎng)絡(luò)條件不好,可以禁用,每次都會(huì)拉取全量
    disable-delta: false
    # 只保留狀態(tài)為 UP 的實(shí)例,默認(rèn)為 true
    filter-only-up-instances: true
    #可以指定也從某些 region 拉取服務(wù)實(shí)例
    #fetch-remote-regions-registry:
	  # 是否打日志記錄每次拉取實(shí)例信息與當(dāng)前緩存內(nèi)的實(shí)例信息變化
    log-delta-diff: true
	  
	  #在spring cloud 環(huán)境中,DiscoveryClient 用的其實(shí)都是 CompositeDiscoveryClient,這個(gè) CompositeDiscoveryClient 邏輯其實(shí)就是多個(gè) DiscoveryClient 共存,先訪問一個(gè),沒找到就通過下一個(gè)尋找
    #這個(gè)order決定了順序,默認(rèn)為 0
    order: 0
  1. 當(dāng)前實(shí)例注冊(cè)相關(guān)配置

eureka:
  instance:
    # 是否將自己注冊(cè)到 eureka 上面
    register-with-eureka: true
	  # 是否在初始化的時(shí)候就注冊(cè)到 eureka,一般設(shè)置為 false,因?yàn)閷?shí)例還不能正常提供服務(wù)
    should-enforce-registration-at-init: false
    # 是否在關(guān)閉的時(shí)候注銷實(shí)例,默認(rèn)為 true
    should-unregister-on-shutdown: true
    # 是否對(duì)于實(shí)例狀態(tài)改變更新進(jìn)行限流,默認(rèn)為 true
    on-demand-update-status-change: true
	  # 實(shí)例信息同定時(shí)同步到 Eureka Server 的間隔時(shí)間。每隔這么長(zhǎng)時(shí)間,檢查實(shí)例信息(即eureka.instance配置信息)是否發(fā)生變化,如果發(fā)生變化,則同步到 Eureka Server,默認(rèn) 30s
    # 主要檢查兩類信息,分別是服務(wù)地址相關(guān)信息,以及服務(wù)過期時(shí)間與刷新時(shí)間配置信息
    instance-info-replication-interval-seconds: 30
    # 實(shí)例信息同定時(shí)同步到 Eureka Server 的初始延遲時(shí)間,默認(rèn) 40s
    initial-instance-info-replication-interval-seconds: 40
  1. http連接相關(guān)配置

eureka:
  instance:
    # 代理相關(guān)配置
    # proxy-host:
    # proxy-port:
    # proxy-user-name:
    # proxy-password:
    # 是否對(duì)于發(fā)往 Eureka Server 的 http 請(qǐng)求啟用 gzip,目前已經(jīng)過期了,只要 Eureka Server 啟用了 gzip,請(qǐng)求就是 gzip 壓縮的
    g-zip-content: true
    # httpclient 的鏈接超時(shí),默認(rèn) 5s
    eureka-server-connect-timeout-seconds: 5
    # httpclient 的讀取超時(shí),默認(rèn) 5s
    eureka-server-read-timeout-seconds: 8
    # httpclient 的空閑連接超時(shí),默認(rèn) 30s
    eureka-connection-idle-timeout-seconds: 30
    # httpclient 的總連接數(shù)量,默認(rèn) 200
    eureka-server-total-connections: 200
    # httpclient 的每個(gè) host 的連接數(shù)量
    eureka-server-total-connections-per-host: 50
	  # tls 相關(guān)配置,默認(rèn)沒有啟用
#      tls:
#        enabled: false
#        key-password:
#        key-store:
#        key-store-password:
#        key-store-type:
#        trust-store:
#        trust-store-password:
#        trust-store-type:
  1. Eureka 服務(wù)器配置

  2. 定時(shí)檢查實(shí)例過期相關(guān)配置:實(shí)例注冊(cè)后需要發(fā)送心跳證明這個(gè)實(shí)例是活著的, Eureka 服務(wù)器中也有定時(shí)任務(wù)檢查實(shí)例是否已經(jīng)過期:

eureka:
  server:
    #主動(dòng)檢查服務(wù)實(shí)例是否失效的任務(wù)執(zhí)行間隔,默認(rèn)是 60s
    eviction-interval-timer-in-ms: 3000
	  #這個(gè)配置在兩個(gè)地方被使用:
    #如果啟用用了自我保護(hù),則會(huì) renewal-threshold-update-interval-ms 指定的時(shí)間內(nèi),收到的心跳請(qǐng)求個(gè)數(shù)是否小于實(shí)例個(gè)數(shù)乘以這個(gè) renewal-percent-threshold
    #定時(shí)任務(wù)檢查過期實(shí)例,每次最多過期 1 - renewal-percent-threshold 這么多比例的實(shí)例
    renewal-percent-threshold: 0.85
  1. 自我保護(hù)相關(guān)配置:Eureka 服務(wù)器中有定時(shí)過期的任務(wù),檢查遲遲沒有心跳的實(shí)例,并注銷他們。自我保護(hù)主要針對(duì)集群中網(wǎng)絡(luò)出現(xiàn)問題,導(dǎo)致有很多實(shí)例無法發(fā)送心跳導(dǎo)致很多實(shí)例狀態(tài)異常,但是實(shí)際實(shí)例還在正常工作的情況,不要讓這些實(shí)例不參與負(fù)載均衡:

eureka:
  server: 
	  #注意,最好所有的客戶端實(shí)例配置的心跳時(shí)間相關(guān)的配置,是相同的。這樣使用自我保護(hù)的特性最準(zhǔn)確。
    #關(guān)閉自我保護(hù)
    #我們這里不使用自我保護(hù),因?yàn)椋?
    #自我保護(hù)主要針對(duì)集群中網(wǎng)絡(luò)出現(xiàn)問題,導(dǎo)致有很多實(shí)例無法發(fā)送心跳導(dǎo)致很多實(shí)例狀態(tài)異常,但是實(shí)際實(shí)例還在正常工作的情況,不要讓這些實(shí)例不參與負(fù)載均衡
    #啟用自我保護(hù)的情況下,就會(huì)停止對(duì)于實(shí)例的過期
    #但是,如果出現(xiàn)這種情況,其實(shí)也代表很多實(shí)例無法讀取注冊(cè)中心了。
    #并且還有一種情況就是,Eureka 重啟。雖然不常見,但是對(duì)于鏡像中其他的組件更新我們還是很頻繁的
    #我傾向于從客戶端對(duì)于實(shí)例緩存機(jī)制來解決這個(gè)問題,如果返回實(shí)例列表為空,則使用上次的實(shí)例列表進(jìn)行負(fù)載均衡,這樣既能解決 Eureka 重啟的情況,又能處理一些 Eureka 網(wǎng)絡(luò)隔離的情況
	  #自我保護(hù)模式基于每分鐘需要收到 renew (實(shí)例心跳)請(qǐng)求個(gè)數(shù),如果啟用了自我保護(hù)模式,只有上一分鐘接收到的 renew 個(gè)數(shù),大于這個(gè)值,實(shí)例過期才會(huì)被注銷
    enable-self-preservation: false
	  # 每分鐘需要收到 renew (實(shí)例心跳)請(qǐng)求個(gè)數(shù)是需要?jiǎng)討B(tài)刷新的,這個(gè)刷新間隔就是 renewal-threshold-update-interval-ms
	  #更新流程大概是:計(jì)算當(dāng)前一共有多少實(shí)例,如果大于之前期望的實(shí)例量 * renewal-percent-threshold(或者沒開啟自我保護(hù)模式),則更新期望的實(shí)例數(shù)量為當(dāng)前一共有多少實(shí)例
    #之后根據(jù)期望的實(shí)例數(shù)量,計(jì)算期望需要收到的實(shí)例心跳請(qǐng)求個(gè)數(shù) = 期望的實(shí)例數(shù)量 * (60 / expected-client-renewal-interval-seconds) * renewal-percent-threshold
    #公式中 60 代表一分鐘,因?yàn)楣接玫搅?nbsp;expected-client-renewal-interval-seconds,也就是實(shí)例平均心跳間隔,為了使這個(gè)公式準(zhǔn)確,最好每個(gè)實(shí)例配置一樣的心跳時(shí)間
    #默認(rèn) 900000ms = 900s = 15min
	  renewal-threshold-update-interval-ms: 900000
	  #上面提到的實(shí)例平均心跳間隔,或者說是期望的心跳間隔,為了使這個(gè)公式準(zhǔn)確,最好每個(gè)實(shí)例配置一樣的心跳時(shí)間
    #默認(rèn) 30s
    expected-client-renewal-interval-seconds: 30
	  #這個(gè)配置在兩個(gè)地方被使用:
    #如果啟用用了自我保護(hù),則會(huì) renewal-threshold-update-interval-ms 指定的時(shí)間內(nèi),收到的心跳請(qǐng)求個(gè)數(shù)是否小于實(shí)例個(gè)數(shù)乘以這個(gè) renewal-percent-threshold
    #定時(shí)任務(wù)檢查過期實(shí)例,每次最多過期 1 - renewal-percent-threshold 這么多比例的實(shí)例
    renewal-percent-threshold: 0.85
  1. 同一區(qū)域內(nèi)集群配置相關(guān):上面我們提到了,同一區(qū)域內(nèi)的 Eureka 服務(wù)器實(shí)例,收到的客戶端請(qǐng)求,會(huì)轉(zhuǎn)發(fā)到同一區(qū)域內(nèi)的的其他 Eureka 服務(wù)器實(shí)例。同時(shí),在某一 Eureka 服務(wù)器實(shí)例啟動(dòng)的時(shí)候,會(huì)從同一區(qū)域內(nèi)其他 Eureka 服務(wù)器同步實(shí)例列表。并且,轉(zhuǎn)發(fā)到其他 Eureka 服務(wù)器實(shí)例是異步轉(zhuǎn)發(fā)的,這就有專門的線程池進(jìn)行轉(zhuǎn)發(fā)。同時(shí),轉(zhuǎn)發(fā)的也是 HTTP 請(qǐng)求,這就需要 HTTP 連接池:

eureka:
  server: 
	  #Eureka Server 從配置中更新同一區(qū)域內(nèi)的其他 Eureka Server 實(shí)例列表間隔,默認(rèn)10分鐘
    peer-eureka-nodes-update-interval-ms: 600000
	  #啟動(dòng)時(shí)從其他 Eureka Server 同步服務(wù)實(shí)例信息的最大重試次數(shù),直到實(shí)例個(gè)數(shù)不為 0,默認(rèn)為 0,這樣其實(shí)就是不同步
    registry-sync-retries: 0
    #啟動(dòng)時(shí)從其他 Eureka Server 同步服務(wù)實(shí)例信息重試間隔
    registry-sync-retry-wait-ms: 30000
	  #集群內(nèi)至少有多少個(gè) UP 的 Eureka Server 實(shí)例數(shù)量,當(dāng)前 Eureka Server 狀態(tài)為 UP。默認(rèn) -1,也就是 Eureka Server 狀態(tài)不考慮 UP 的集群內(nèi)其他 Eureka Server 數(shù)量。
    min-available-instances-for-peer-replication: -1
	  #請(qǐng)求其他實(shí)例任務(wù)的最大超時(shí)時(shí)間,默認(rèn) 30 秒
    max-time-for-replication: 30000
	  #用來處理同步任務(wù)的線程數(shù)量,有兩個(gè)線程池,一個(gè)處理批量同步任務(wù),默認(rèn)大小為20
    max-threads-for-peer-replication: 20
    #另一個(gè)處理非批量任務(wù)(如果沒用 AWS Autoscaling 對(duì)接相關(guān)特性則沒有啥用),默認(rèn)大小為20
    max-threads-for-status-replication: 20
    #處理批量任務(wù)的線程池隊(duì)列長(zhǎng)度,默認(rèn)為 10000
    max-elements-in-peer-replication-pool: 10000
    #處理非批量任務(wù)的線程池隊(duì)列長(zhǎng)度,默認(rèn)為 10000
    max-elements-in-status-replication-pool: 10000
	  #Eureka Server 通過 httpclient 訪問其他 Eureka Server 同步實(shí)例,httpclient 的連接超時(shí),默認(rèn) 200ms
    peer-node-connect-timeout-ms: 200
    #httpclient 的讀取超時(shí),默認(rèn) 200ms,一般不用太長(zhǎng)
    peer-node-read-timeout-ms: 200
    #httpclient 的最大總連接數(shù)量,默認(rèn) 1000
    peer-node-total-connections: 1000
    #httpclient 的對(duì)于某一 host 最大總連接數(shù)量,默認(rèn) 500
    peer-node-total-connections-per-host: 500
    #httpclient 的連接空閑保持時(shí)間,默認(rèn) 30s
    peer-node-connection-idle-timeout-seconds: 30
  1. 跨區(qū)域相關(guān)配置。Eureka 服務(wù)器會(huì)定時(shí)拉取其他區(qū)域的服務(wù)實(shí)例列表緩存在本地。在查詢本地查詢不到某個(gè)微服務(wù)的時(shí)候,就會(huì)查詢這個(gè)遠(yuǎn)程區(qū)域服務(wù)實(shí)例的緩存。相關(guān)配置如下:

eureka:
  server: 
    #請(qǐng)求其他 Region 的 httpclient 的連接超時(shí),默認(rèn) 1000ms
    remote-region-connect-timeout-ms: 1000
    #請(qǐng)求其他 Region 的 httpclient 的讀取超時(shí),默認(rèn) 1000ms
    remote-region-read-timeout-ms: 1000
    #請(qǐng)求其他 Region 的 httpclient 的最大總連接數(shù)量,默認(rèn) 1000
    remote-region-total-connections: 1000
    #請(qǐng)求其他 Region 的 httpclient 的對(duì)于某一 host 最大總連接數(shù)量,默認(rèn) 500
    remote-region-total-connections-per-host: 500
    #請(qǐng)求其他 Region 的 httpclient 的連接空閑保持時(shí)間,默認(rèn) 30s
    remote-region-connection-idle-timeout-seconds: 30
    #請(qǐng)求其他 Region 的 http 請(qǐng)求是否開啟 gzip,對(duì)于其他 Region 我們認(rèn)為網(wǎng)絡(luò)連接是比較慢的,所以默認(rèn)開啟壓縮
    g-zip-content-from-remote-region: true
    #    remote-region-urls-with-name:
    #      region2eureka1: http://127:0:0:1:8212/eureka/
    #      region2eureka2: http://127:0:0:1:8213/eureka/
    #    remote-region-app-whitelist:
    #如果需要從其他 Region 獲取實(shí)例信息,這個(gè)獲取間隔,默認(rèn)為 30s
    remote-region-registry-fetch-interval: 30
    #如果需要從其他 Region 獲取實(shí)例信息,這個(gè)任務(wù)的線程池,默認(rèn)為 20個(gè)
    remote-region-fetch-thread-pool-size: 20

啟動(dòng)一個(gè) Eureka Server

啟動(dòng)一個(gè) Eureka 注冊(cè)中心服務(wù)器非常簡(jiǎn)單,我們這里使用的是 Spring Cloud 封裝好的啟動(dòng)包。Eureka 1.x 的 Eureka Server 是純基于 servlet 的應(yīng)用。為了與 Spring Cloud 結(jié)合使用,需要粘合模塊,這就是 spring-cloud-netflix-eureka-server。在 spring-cloud-netflix-eureka-server 中,也有一個(gè)和 com.netflix.eureka.EurekaBootStrap 代碼很類似的啟動(dòng)類,即 org.springframework.cloud.netflix.eureka.server.EurekaServerBootstrap。在我們啟動(dòng) EurekaServer 實(shí)例的時(shí)候,只用加入對(duì)于 spring-cloud-starter-eureka-server 的依賴即可。之后通過 @EnableEurekaServer 注解即可啟動(dòng)一個(gè) Eureka 服務(wù)器實(shí)例。

Eureka Server 的依賴:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-iiford</artifactId>
        <groupId>com.github.hashjang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-iiford-eureka-server</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.github.hashjang</groupId>
            <artifactId>spring-cloud-iiford-service-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
</project>

Eureka Server 的配置: 參考我們上面的配置即可: application.yml

Eureka Server 的啟動(dòng)類: EurekaServerApplication.java

package com.github.hashjang.iiford.eureka.server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

“如何使用Eureka作為注冊(cè)中心”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI