我们如何使用Spring Cloud和Spring Boot的合格属性在Eureka中发现服务

时间:2016-08-24 00:18:47

标签: spring-boot spring-cloud-netflix spring-cloud-feign

我们有大约50个使用Spring Boot开发的微服务。我们使用Spring Cloud向Eureka注册服务,并使用Feign从消费者处调用服务。合同非常标准,消费者使用带有@FeignClient("<foo>")注释的界面来查找使用Eureka注册为foo的服务。目标服务上的注册,查找和调用都可以按预期运行一个或多个服务实例。

我们有一项新要求,即同一服务foo可能正在运行多个实例,其中每个实例都具有特定的构造型名称。例如,foo的某些实例预计会处理第三方集成同步工作负载,而foo的某些实例则需要处理内部消息(异步工作负载)。我们在服务中定义了一个名为stereotype的配置属性,该属性将在引导程序中定义(通过Spring Cloud配置的一部分完成),以告知服务实例处理syncasync工作负载。配置如下所示:

service.stereotype: sync # or async

此外,我们还会在注册服务eureka.instance.metadatamap时将此属性添加到Eureka的stereotype地图foo属性中。我可以看到Eureka现在在服务foo注册时显示该值。

到目前为止一切顺利。现在的问题是:

DiscoveryClient或Feign中是否有配置(或注释)机制查找foo,但使用stereotype作为限定符。换句话说,当我的消费者应用程序查找Eureka时,它能以某种方式告诉Eureka只提供例如stereotypeasync的实例吗?如果可以,那么我的消费者组件可以确保仅将异步工作负载发送到处理异步工作负载的foo实例。

到目前为止,在我的研究中,我还没有找到任何东西。我编写了一个示例(可以进入DiscoveryClient覆盖),它将使用Eureka REST接口GET /eureka/v2/apps/appID按照概述here,然后通过查找每个的元数据映射来查找目标端点返回的实例。但那听起来像是蛮力。理想情况下,我希望使用现有机制之一(如果可用),以便我可以继续使用负载平衡并重试Feign的功能,而不是重新发明轮子。

0 个答案:

没有答案