2

AWS には、すべての運用環境 (dev、qa、uat、prod) を提供する単一の Consul クラスターがあります。サービスが Consul に登録されると、登録された名前はデフォルトで Spring Boot アプリケーション名を使用します。その結果、dev、qa、prod にデプロイされた同じサービスを、単一の運用可能な Consul クラスターで区別することはできません。そのため、次のようにSCC を構成bootstrap.xmlしました。instance-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ようにサービスを確実にフィルタリングする方法は?devhelloworldservicedevhelloworldservice

クライアントサービスで使用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