Spring Cloud Netflix—使用EurekaClient

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

@Autowired private EurekaClient discoveryClient;spring

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;.net

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更改期限,這將加快客戶端鏈接到其餘服務的過程。在生產中,最好堅持使用默認值,由於服務器內部有一些計算能夠對租賃更新期進行假設。cdn

區 若是您已將Eureka客戶端部署到多個區域,您可能但願這些客戶端在使用另外一個區域中的服務以前,利用同一區域內的服務。爲此,您須要正確配置您的Eureka客戶端。htm

首先,您須要確保將Eureka服務器部署到每一個區域,而且它們是彼此的對等體。有關詳細信息,請參閱區域和區域部分 。blog

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

1區服務1get

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

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

源碼來源:http://minglisoft.cn/honghu/technology.html
相關文章
相關標籤/搜索