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

本系列程式碼地址://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