SpringCloud升級之路2020.0.x版-17.Eureka的實例配置


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

image

上一節我們提到過,每個注冊到 Eureka 上面的實例就是 Eureka 實例。 不論這個實例本身就是 Eureka Server 或者是要注冊的微服務,只要作為實例,就需要實例配置。我們系列中的實例配置,特指 Spring Cloud 中的 Eureka 實例配置(基於 spring-cloud-netflix),配置均以 eureka.instance 開頭,對應配置類是 EurekaInstanceConfigBean

實例配置會影響 Eureka Server 上這個實例的信息,心跳時間和過期時間等信息,同時對於某些微服務框架也會使用實例中的元數據做一些負載均衡、斷路等策略。

實例配置均以 eureka.instance 開頭,對應類是 EurekaInstanceConfigBean

image

首先是訪問這個 Eureka 實例所需的信息,這些信息一般不需要我們自己手動配置,會自動讀取:

eureka:
    instance:
      #一般不用我們自己設置,EurekaInstanceConfigBean 的構造器會通過 InetUtils 獲取 ip 地址
      #ip-address:
      #一般不用我們自己設置,EurekaInstanceConfigBean 的構造器會通過 InetUtils 獲取 hostname
      #hostname:

至於注冊中心上面,傾向於直接用 ip 注冊還是域名注冊,這個是可以配置的。有些時候域名映射的 ip 可能會改變,但是服務本身地址沒變,在雲環境尤其常見,所以我們一般會配置使用 ip 注冊:

eureka:
    instance:
      #注冊到 eureka 上面供其他實例訪問的地址使用 ip 進行注冊,其他實例會通過 ip 進行訪問
      prefer-ip-address: true

對於端口,一般使用微服務的端口直接進行注冊,這里也是可以配置的,因為可能有些 SideCar 應用要注冊的端口和本身 Spring Boot 服務端口不一樣。

eureka:
    instance:
      #不用設置 non-secure-port,自動使用 server.port 作為 non-secure-port
      #non-secure-port:
      #如果 secure-port-enabled 是 true,則會自動使用 server.port 作為 secure-port;我們一般內部調用不用 ssl,所以不需要配置 secure-port
      #secure-port:
      #默認是啟用 non-secure-port 的
      non-secure-port-enabled: true
      #默認是不啟用 secure-port 的,我們一般內部調用不用 ssl
      secure-port-enabled: false

同時,我們還可以對於注冊的微服務名稱,以及該實例的 ID,進行訂制:

eureka:
    instance:
      #個性化的實例id,包括 ip:微服務名稱:端口
      instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
      # app名稱,不填寫在 Spring-cloud-netflix 體系下默認就是 spring.application.name
      appname: ${spring.application.name}
      #app組名稱歸類用的,目前也沒什么用
      app-group-name: common
      #實例命名空間,目前也沒什么用
      namespace: public

image

這些信息對於 Eureka 本身沒有什么用,主要給外部監控使用,例如從 Eureka 上面獲取實例信息,根據基本鏈接信息對實例的健康性進行檢查。

eureka:
    instance:
      # 健康檢查地址,默認是 /actuator/health
      health-check-url-path: /actuator/health
      # 實例狀態地址,默認是 /actuator/info
      status-page-url-path: /actuator/info
      # 首頁地址,默認是 /
      home-page-url-path: /

image

實例注冊行為配置,即實例注冊后的行為,以及心跳間隔等配置。Eureka 客戶端會根據這個配置進行心跳,並且是否在一開始就注冊自己為 UP 狀態開始服務,或者注冊自己為 STARTING 待某些初始化任務完成后再改為 UP,Eureka Server 也會根據這個配置結合實例上次心跳時間判斷實例是否存活

eureka:
    instance:
	  # 服務過期時間配置,超過這個時間沒有接收到心跳EurekaServer就會將這個實例剔除
      # 注意,EurekaServer一定要設置eureka.server.eviction-interval-timer-in-ms否則這個配置無效
      # 這個配置一般為服務刷新時間配置的三倍
      # 默認90s
      lease-expiration-duration-in-seconds: 15
      #服務刷新時間配置,每隔這個時間會主動心跳一次
      #默認30s
      lease-renewal-interval-in-seconds: 5
      #實例注冊后是否立刻開始服務,默認為 false,一般注冊后還需要做一些操作,所以注冊實例的狀態是 STARTING。后面改變狀態后會更新為 UP
      instance-enabled-onit: false

image

其他框架可以通過實例元數據來實現一些個性化的功能,例如 configPath 是使用 spring-cloud-config 的時候會設置,zone 是實例的區域配置,會被 spring-cloud-loadbalancer 使用。

eureka:
    instance:
	  #元數據map,我們可以自己使用,放一些個性化的元數據,目前只有 configPath 和 zone 比較有用。 configPath 是使用 spring-cloud-config 的時候會設置 
      metadata-map:
        # spring cloud 體系中,可用區的配置放入元數據中,key 為 zone
        zone: zone1

我們這一節詳細分析了 Eureka 的實例配置。下一節,我們將開始分析 Eureka 的客戶端配置。

微信搜索“我的編程喵”關注公眾號,每日一刷,輕松提升技術,斬獲各種offer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM