最新の安定バージョンについては、Spring Cloud Gateway 4.3.2 を使用してください! |
DiscoveryClient ルート定義ロケーター
DiscoveryClient 互換のサービスレジストリに登録されているサービスに基づいてルートを作成するようにゲートウェイを設定できます。
デフォルトでは、作成されたルートはプロトコル lb://service-name (service-name は DiscoveryClient::getServices が返す文字列) を使用し、これは負荷分散されることを意味します。そのため、クラスパスで使用できるように、org.springframework.cloud:spring-cloud-starter-loadbalancer 依存関係も含める必要があります。
これを有効にするには、spring.cloud.gateway.discovery.locator.enabled=true を設定し、DiscoveryClient 実装 (Netflix Eureka、Consul、Zookeeper、Kubernetes など) がクラスパス上にあり、有効になっていることを確認します。
DiscoveryClient ルートの述語とフィルターの構成
デフォルトでは、ゲートウェイは DiscoveryClient で作成されたルートに対して単一の述語とフィルターを定義します。
デフォルトの述語は、パターン /serviceId/** で定義されたパス述語です。ここで、serviceId は、DiscoveryClient からのサービスの ID です。
デフォルトのフィルターは、正規表現 /serviceId/?(?<remaining>.*) と置換 /${remaining} を使用した書き換えパスフィルターです。これにより、リクエストがダウンストリームに送信される前に、パスからサービス ID が削除されます。
DiscoveryClient ルートで使用される述語またはフィルターをカスタマイズする場合は、spring.cloud.gateway.discovery.locator.predicates[x] と spring.cloud.gateway.discovery.locator.filters[y] を設定します。その際、その機能を保持する場合は、前述のデフォルトの述語とフィルターを必ず含める必要があります。次の例は、プロパティと yaml 形式でこれがどのように見えるかを示しています。
spring.cloud.gateway.discovery.locator.predicates[0].name=Path
spring.cloud.gateway.discovery.locator.predicates[0].args[pattern]="'/'+serviceId+'/**'"
spring.cloud.gateway.discovery.locator.predicates[1].name=Host
spring.cloud.gateway.discovery.locator.predicates[1].args[pattern]="'**.foo.com'"
spring.cloud.gateway.discovery.locator.filters[0].name=CircuitBreaker
spring.cloud.gateway.discovery.locator.filters[0].args[name]=serviceId
spring.cloud.gateway.discovery.locator.filters[1].name=RewritePath
spring.cloud.gateway.discovery.locator.filters[1].args[regexp]="'/' + serviceId + '/?(?<remaining>.*)'"
spring.cloud.gateway.discovery.locator.filters[1].args[replacement]="'/$\{remaining}'"spring:
cloud:
gateway:
discovery:
locator:
predicates:
- name: Host
args:
pattern: "'**.foo.com'"
- name: Path
args:
pattern: "'/'+serviceId+'/**'"
filters:
- name: CircuitBreaker
args:
name: serviceId
- name: RewritePath
args:
regexp: "'/' + serviceId + '/?(?<remaining>.*)'"
replacement: "'/${remaining}'"