Spring Cloud Eureka 配置
實例名配置
在Netflix Eureka的原生實現中,實例名采用主機名作為默認值,這樣的設置使得在同一主機上無法啟動多個相同的實例,所以在Spring Cloud Eureka的配置中,針對同一主機啟動多個實例的情況,采用如下規則:
eureka.instance.instanceId=${spring.application.name}:${random.int}
利用應用名加隨機數的方式來區分不同的實例,從而實現同一主機上,不指定端口就能輕松啟動多個實例的效果。
端點配置
在InstanceInfo中,我們可以看到一些URL的配置信息,比如homePageUrl、statusPageUrl、healthCheckUrl,他們分別代表了應用主頁狀態URL、狀態也的URL、健康檢查URL。其中狀態頁和健康檢查的URL在Spring Cloud Eureka中默認使用了spring-boot-actuator 模塊提供的/info 端點和/health 端點。
大多數情況下,我們並不需要修改這幾個URL的配置,但是如果設置了context-path,這時,所有的spring-boot-actuator模塊的監控端點都會增加一個前綴。所以需要做如下修改:
management.context-path=/hello
eureka.instance.statusPageUrlPath=${management.context-path}/info
eureka.instance.healthCheckUrlPath=${management.context-path}/health
健康檢查
默認情況下,Eureka中各個服務實例的健康檢查並不是通過spring-boot-actuator模塊的/health端點來實現的,而是依靠客戶端心跳方式來保持服務實例的存活。除非心跳停止,服務中心才會將其剔除。
默認的心跳實現方式可以有效檢查客戶端進程是否正常運作,但卻無法保證客戶端應用能夠正常提供服務。由於大多數微服務應用都會有一些其他資源的依賴,比如數據庫、緩存、消息代理等,如果應用無法聯通這些資源的時候,實際已經不能正常提供服務了,但是心跳檢查還在,還是會被消費者調用,這樣無法達到實際的效果。
在Spring Cloud Eureka中,我們可以通過簡單的配置,把Eureka客戶端的健康檢查交給 spring-boot-actuator 模塊的 /health 端點,以實現更加全面的健康狀態維護。
在pom.xml中引入spring-boot-actuator 模塊依賴。
在application.properties中增加參數配置 eureka.client.healthcheck.enabled=true;
Spring Cloud Eureka 配置