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

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

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

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

首先是訪問這個 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

這些資訊對於 Eureka 本身沒有什麼用,主要給外部監控使用,例如從 Eureka 上面獲取例項資訊,根據基本連結資訊對例項的健康性進行檢查。

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

例項註冊行為配置,即例項註冊後的行為,以及心跳間隔等配置。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

其他框架可以通過例項元資料來實現一些個性化的功能,例如 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