eureka:
client:
healthcheck:
enabled: true
警告eurekaclienthealthcheckenabled=true只能在applicationyml中设置。设置bootstrapyml中的值将导致不期望的副作用,例如在具有UNKNOWN状态的eureka中注册。
如果您需要更多的控制健康检查,您可以考虑实施自己的comnetflixappinfoHealthCheckHandler。
Eureka实例和客户端的元数据
值得花点时间了解Eureka元数据的工作原理,以便您可以在平台上使用它。有主机名,IP地址,端口号,状态页和运行状况检查等标准元数据。这些发布在服务注册表中,由客户使用,以直接的方式联系服务。额外的元数据可以添加到eurekainstancemetadataMap中的实例注册中,并且这将在远程客户端中可访问,但一般不会更改客户端的行为,除非意识到元数据的含义。下面描述了几个特殊情况,其中Spring Cloud已经为元数据映射指定了含义。
在Cloudfoundry上使用Eureka
Cloudfoundry有一个全局路由器,所以同一个应用程序的所有实例都具有相同的主机名(在具有相似架构的其他PaaS解决方案中也是如此)。这不一定是使用Eureka的障碍,但如果您使用路由器(建议,甚至是强制性的,具体取决于您的平台的设置方式),则需要明确设置主机名和端口号(安全或非安全),以便他们使用路由器。您可能还需要使用实例元数据,以便您可以区分客户端上的实例(例如,在自定义负载平衡器中)。默认情况下,eurekainstanceinstanceId为vcapapplicationinstance_id。例如:
applicationyml
eureka:
instance:
hostname: ${vcapapplicationuris[0]}
nonSecurePort: 80
根据Cloudfoundry实例中安全规则的设置方式,您可以注册并使用主机VM的IP地址进行直接的服务到服务调用。此功能尚未在Pivotal Web Services( PWS )上提供。
在AWS上使用Eureka
如果应用程序计划将部署到AWS云,那么Eureka实例必须被配置为AWS意识到,这可以通过定制来完成 EurekaInstanceConfigBean 方式如下:
@Bean
@Profile("!default")
public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils) {
EurekaInstanceConfigBean b = new EurekaInstanceConfigBean(inetUtils);
AmazonInfo info = AmazonInfoBuildernewBuilder()autoBuild("eureka");
bsetDataCenterInfo(info);
return b;
}
更改Eureka实例ID
香草Netflix Eureka实例注册了与其主机名相同的ID(即每个主机只有一个服务)。Spring Cloud Eureka提供了一个明智的默认,如下所示:${springcloudclienthostname}:${springapplicationname}:${springapplicationinstance_id:${serverport}}}。例如myhost:myappname:8080。
使用Spring Cloud,您可以通过在eurekainstanceinstanceId中提供唯一的标识符来覆盖此。例如:
applicationyml
eureka:
instance:
instanceId: ${springapplicationname}:${vcapapplicationinstance_id:${springapplicationinstance_id:${randomvalue}}}
使用这个元数据和在localhost上部署的多个服务实例,随机值将在那里进行,以使实例是唯一的。在Cloudfoundry中,vcapapplicationinstance_id将在Spring Boot应用程序中自动填充,因此不需要随机值。
使用EurekaClient
一旦您拥有@EnableDiscoveryClient(或@EnableEurekaClient)的应用程序,您就可以使用它来从 Eureka服务器 发现服务实例。一种方法是使用本机comnetflixdiscoveryEurekaClient(而不是Spring云DiscoveryClient),例如
@Autowired
private EurekaClient discoveryClient;
public String serviceUrl() {
InstanceInfo instance = discoveryClientgetNextServerFromEureka("STORES", false);
return instancegetHomePageUrl();
}
提示不要使用@PostConstruct方法或@Scheduled方法(或ApplicationContext可能尚未启动的任何地方)EurekaClient。它被初始化为SmartLifecycle(带有phase=0),所以最早可以依靠它可用的是另一个具有更高阶段的SmartLifecycle。
本机Netflix EurekaClient的替代方案
您不必使用原始的NetflixEurekaClient,通常在某种包装器后面使用它更为方便。Spring Cloud支持 Feign (REST客户端构建器),还支持 SpringRestTemplate 使用逻辑Eureka服务标识符(VIP)而不是物理URL。要使用固定的物理服务器列表配置Ribbon,您可以将<client>ribbonlistOfServers设置为逗号分隔的物理地址(或主机名)列表,其中<client>是客户端的ID。
您还可以使用orgspringframeworkcloudclientdiscoveryDiscoveryClient,它为Netflix不具体的发现客户端提供简单的API,例如
@Autowired
private DiscoveryClient discoveryClient;
public String serviceUrl() {
List<ServiceInstance> list = discoveryClientgetInstances("STORES");
if (list != null && listsize() > 0 ) {
return listget(0)getUri();
}
return null;
} 要说两者的区别,必须提一下分布式架构中的CAP理论,即一个分布式框架,只能同时满足C一致性、A可用性、P网络分区容错性这三者中的两个,不可能同时兼备三者。
从这个角度上来看,Dubbo推荐的注册中心首选ZK,而ZK是一个满足CP的框架;Eureka由于其架构设计,更多专注于AP。
对于容错机制,Dubbo自身实现了多个错误处理方式,比如失败切换Failover、快速失败Failfast、失败安全Failsafe等,Eureka是借助于Spring Cloud中的熔断器Hytrix实现的容错。
对于负载均衡,Dubbo自身实现了多种负载均衡方式,比如随机权重、哈希一致性等,Eureka同样是将此功能外放,通过Ribbon等实现了负载均衡。
服务注册及发现,Dubbo自身封装了NettyClient等通讯工具,而Eureka都是采用的应用层通讯>本章主要介绍Eureka Client端源码分析。
客户端主要是向Server服务端发送>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)