Spring Cloud Netflix—使用EurekaClient
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Netflix—使用EurekaClient相关的知识,希望对你有一定的参考价值。
参考技术A 一旦您拥有@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的替代方案
您不必使用原始的NetflixEurekaClient,通常在某种包装器后面使用它更为方便。Spring Cloud支持 Feign (REST客户端构建器),还支持 SpringRestTemplate 使用逻辑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的主要内容,如果未能解决你的问题,请参考以下文章
将 apache kafka 与 Spring Cloud netflix 堆栈一起使用
spring-cloud-starter-eureka-server 和 spring-cloud-starter-netflix-eureka-server的区别
Spring Cloud / Netflix OSS 中的负载均衡
Spring Cloud Netflix:使用 Feign 处理远程服务错误
随手记录关于spring-cloud-starter-eureka-server 和 spring-cloud-starter-netflix-eureka-server