SpringCloud升級之路2020.0.x版-17.Eureka的實例配置
- 2021 年 8 月 21 日
- 筆記
- Eureka, Spring Cloud, Spring Cloud 升級之路
本系列程式碼地址://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: