Eureka的健康檢查
默認(rèn)情況下呵哨,Eureka使用客戶(hù)端心跳來(lái)確定客戶(hù)端是否啟動(dòng)脊框。除非另有規(guī)定侣监,否則發(fā)現(xiàn)客戶(hù)端將不會(huì)根據(jù)Spring Boot執(zhí)行器傳播應(yīng)用程序的當(dāng)前運(yùn)行狀況檢查狀態(tài)瑰剃。這意味著成功注冊(cè)后Eureka將永遠(yuǎn)宣布申請(qǐng)?zhí)幱凇癠P”狀態(tài)劈彪。通過(guò)啟用Eureka運(yùn)行狀況檢查可以改變此行為竣蹦,從而將應(yīng)用程序狀態(tài)傳播到Eureka。因此沧奴,每個(gè)其他應(yīng)用程序?qū)⒉粫?huì)在“UP”之外的狀態(tài)下將流量發(fā)送到應(yīng)用程序痘括。
application.yml
eureka:
? client:
? ? healthcheck:
? ? ? enabled: true
警告eureka.client.healthcheck.enabled=true只能在application.yml中設(shè)置。設(shè)置bootstrap.yml中的值將導(dǎo)致不期望的副作用滔吠,例如在具有UNKNOWN狀態(tài)的eureka中注冊(cè)纲菌。
如果您需要更多的控制健康檢查,您可以考慮實(shí)施自己的com.netflix.appinfo.HealthCheckHandler疮绷。
Eureka實(shí)例和客戶(hù)端的元數(shù)據(jù)
值得花點(diǎn)時(shí)間了解Eureka元數(shù)據(jù)的工作原理翰舌,以便您可以在平臺(tái)上使用它。有主機(jī)名冬骚,IP地址椅贱,端口號(hào),狀態(tài)頁(yè)和運(yùn)行狀況檢查等標(biāo)準(zhǔn)元數(shù)據(jù)唉韭。這些發(fā)布在服務(wù)注冊(cè)表中夜涕,由客戶(hù)使用,以直接的方式聯(lián)系服務(wù)属愤。額外的元數(shù)據(jù)可以添加到eureka.instance.metadataMap中的實(shí)例注冊(cè)中女器,并且這將在遠(yuǎn)程客戶(hù)端中可訪(fǎng)問(wèn),但一般不會(huì)更改客戶(hù)端的行為住诸,除非意識(shí)到元數(shù)據(jù)的含義驾胆。下面描述了幾個(gè)特殊情況,其中Spring Cloud已經(jīng)為元數(shù)據(jù)映射指定了含義贱呐。
在Cloudfoundry上使用Eureka
Cloudfoundry有一個(gè)全局路由器丧诺,所以同一個(gè)應(yīng)用程序的所有實(shí)例都具有相同的主機(jī)名(在具有相似架構(gòu)的其他PaaS解決方案中也是如此)。這不一定是使用Eureka的障礙奄薇,但如果您使用路由器(建議驳阎,甚至是強(qiáng)制性的,具體取決于您的平臺(tái)的設(shè)置方式)馁蒂,則需要明確設(shè)置主機(jī)名和端口號(hào)(安全或非安全)呵晚,以便他們使用路由器。您可能還需要使用實(shí)例元數(shù)據(jù)沫屡,以便您可以區(qū)分客戶(hù)端上的實(shí)例(例如饵隙,在自定義負(fù)載平衡器中)。默認(rèn)情況下沮脖,eureka.instance.instanceId為vcap.application.instance_id金矛。例如:
application.yml
eureka:
? instance:
? ? hostname: ${vcap.application.uris[0]}
? ? nonSecurePort: 80
根據(jù)Cloudfoundry實(shí)例中安全規(guī)則的設(shè)置方式芯急,您可以注冊(cè)并使用主機(jī)VM的IP地址進(jìn)行直接的服務(wù)到服務(wù)調(diào)用。此功能尚未在Pivotal Web Services(PWS)上提供驶俊。
在AWS上使用Eureka
如果應(yīng)用程序計(jì)劃將部署到AWS云娶耍,那么Eureka實(shí)例必須被配置為AWS意識(shí)到,這可以通過(guò)定制來(lái)完成EurekaInstanceConfigBean方式如下:
@Bean
@Profile("!default")
public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils) {
? EurekaInstanceConfigBean b = new EurekaInstanceConfigBean(inetUtils);
? AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");
? b.setDataCenterInfo(info);
? return b;
}
更改Eureka實(shí)例ID
香草Netflix Eureka實(shí)例注冊(cè)了與其主機(jī)名相同的ID(即每個(gè)主機(jī)只有一個(gè)服務(wù))废睦。Spring Cloud Eureka提供了一個(gè)明智的默認(rèn)伺绽,如下所示:${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}}。例如myhost:myappname:8080嗜湃。
使用Spring Cloud奈应,您可以通過(guò)在eureka.instance.instanceId中提供唯一的標(biāo)識(shí)符來(lái)覆蓋此。例如:
application.yml
eureka:
? instance:
? ? instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
使用這個(gè)元數(shù)據(jù)和在localhost上部署的多個(gè)服務(wù)實(shí)例购披,隨機(jī)值將在那里進(jìn)行杖挣,以使實(shí)例是唯一的。在Cloudfoundry中刚陡,vcap.application.instance_id將在Spring Boot應(yīng)用程序中自動(dòng)填充惩妇,因此不需要隨機(jī)值。
源碼來(lái)源:http://minglisoft.cn/honghu/technology.html