Spring Cloud Netflix—使用EurekaClient

blingbling1發表於2018-03-02

一旦您擁有@EnableDiscoveryClient(或@EnableEurekaClient)的應用程式,您就可以使用它來從Eureka伺服器發現服務例項。一種方法是使用本機com.netflix.discovery.EurekaClient(而不是Spring雲DiscoveryClient),例如

@Autowired private EurekaClient discoveryClient;

public String serviceUrl() { InstanceInfo instance = discoveryClient.getNextServerFromEureka("STORES", false); return instance.getHomePageUrl(); } 提示 不要使用@PostConstruct方法或@Scheduled方法(或ApplicationContext可能尚未啟動的任何地方)EurekaClient。它被初始化為SmartLifecycle(帶有phase=0),所以最早可以依靠它可用的是另一個具有更高階段的SmartLifecycle。 本機Netflix EurekaClient的替代方案 您不必使用原始的Netflix EurekaClient,通常在某種包裝器後面使用它更為方便。Spring Cloud支援Feign(REST客戶端構建器),還支援Spring RestTemplate使用邏輯Eureka服務識別符號(VIP)而不是物理URL。要使用固定的物理伺服器列表配置Ribbon,您可以將.ribbon.listOfServers設定為逗號分隔的實體地址(或主機名)列表,其中是客戶端的ID。

您還可以使用org.springframework.cloud.client.discovery.DiscoveryClient,它為Netflix不具體的發現客戶端提供簡單的API,例如

@Autowired private DiscoveryClient discoveryClient;

public String serviceUrl() { List list = discoveryClient.getInstances("STORES"); if (list != null && list.size() > 0 ) { return list.get(0).getUri(); } return null; } 為什麼註冊服務這麼慢? 作為一個例項也包括定期心跳到登錄檔(通過客戶端的serviceUrl),預設持續時間為30秒。在例項,伺服器和客戶端在其本地快取中都具有相同的後設資料(因此可能需要3個心跳)之前,客戶端才能發現服務。您可以使用eureka.instance.leaseRenewalIntervalInSeconds更改期限,這將加快客戶端連線到其他服務的過程。在生產中,最好堅持使用預設值,因為伺服器內部有一些計算可以對租賃更新期進行假設。

區 如果您已將Eureka客戶端部署到多個區域,您可能希望這些客戶端在使用另一個區域中的服務之前,利用同一區域內的服務。為此,您需要正確配置您的Eureka客戶端。

首先,您需要確保將Eureka伺服器部署到每個區域,並且它們是彼此的對等體。有關詳細資訊,請參閱區域和區域部分 。

接下來,您需要告知Eureka您的服務所在的區域。您可以使用metadataMap屬性來執行此操作。例如,如果service 1部署到zone 1和zone 2,則需要在service 1中設定以下Eureka屬性

1區服務1

eureka.instance.metadataMap.zone = zone1 eureka.client.preferSameZoneEureka = true 第2區的服務1

eureka.instance.metadataMap.zone = zone2 eureka.client.preferSameZoneEureka = true

Spring Cloud Netflix—使用EurekaClient
原始碼來源:http://minglisoft.cn/honghu/technology.html

相關文章