2

我们在 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{ ... }
4

0 回答 0