我们在 AWS 中有一个 Consul 集群,服务于所有操作环境(dev、qa、uat、prod)。当服务向 Consul 注册时,注册名称默认使用 spring boot 应用程序名称。因此,部署在 dev、qa、prod 中的相同服务无法在单个可操作的 Consul 集群中进行区分。bootstrap.xml
所以我们配置SCCinstance-zone
如下:
spring:
cloud:
consul:
discovery:
instance-zone: dev
tags: dev
现在,在 Consul 中列出目录服务时,我们会看到以下内容;服务似乎被正确标记,这很好。
{
"consul": [],
"helloworldservice": [
"dev",
"zone=dev"
],
"helloworldservice": [
"qa",
"zone=qa"
]
}
问题
我们在客户端使用 Feign 客户端(duh):
@FeignClient(value = "helloworldservice")
public interface MyBigFatHelloWorldServiceProxy{ ... }
..但是发现服务时会出现问题;如何确保服务被过滤,以保证zone
部署到dev
尝试发现的服务helloworldservice
只找到的dev
实例helloworldservice
?
尝试server-list-query-tags
在客户端服务中使用,不确定这是否正确:
spring:
cloud:
consul:
discovery:
enabled: true
register: false
instance-zone: dev
default-query-tag: zone
server-list-query-tags:
zone: dev
dev: dev
application:
name: clientservice
还注意到 FeignClient 支持serviceId
,我可以用它来过滤发现的标签吗?
@FeignClient(value = "helloworldservice", serviceId = "dev")
public interface MyBigFatHelloWorldServiceProxy{ ... }