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
ようにサービスを確実にフィルタリングする方法は?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{ ... }