Spring Cloud Gateway は、サービスディスカバリと統合することで、登録済みのマイクロサービスを自動的にルーティング対象に含める機能を提供する。これにより、ゲートウェイ経由で各サービスに簡単にアクセス可能となる。
1. サービスレジストリへのゲートウェイ登録
ここでは、Eureka をサービスレジストリとして利用し、Spring Cloud Gateway をクライアントとして登録する手順を示す。
依存関係の追加
まず、spring-cloud-starter-netflix-eureka-client をプロジェクトに追加する必要がある。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
設定ファイルの記述
application.yml に以下の設定を追加する:
server:
port: 8081
eureka:
client:
service-url:
defaultZone: http://localhost:8088/eureka/
logging:
level:
org.springframework.cloud.gateway: debug
spring:
application:
name: gateway-service
cloud:
gateway:
discovery:
locator:
enabled: true
spring.cloud.gateway.discovery.locator.enabled: true を設定することで、Eureka に登録された各サービス(serviceId)に対して自動的にルートが生成される。アクセス形式は http://[ゲートウェイホスト]:[ポート]/[serviceId]/[パス] となる。
動作確認
Eureka Server および Eureka Client(例:spring-cloud-producer)を起動後、ゲートウェイも起動する。その後、ブラウザで以下のようにアクセスすると、対象サービスのレスポンスが返される:
http://localhost:8081/SPRING-CLOUD-PRODUCER/hello?name=cuiyw
2. Gateway フィルターの利用
Spring Cloud Gateway におけるフィルターは、リクエスト処理の前(PRE)または後(POST)に実行される。フィルターには以下の2種類がある:
- GatewayFilter:特定のルートに適用されるフィルター
- GlobalFilter:すべてのルートに共通して適用されるフィルター
AddRequestParameter フィルターの例
ここでは、リクエストに固定パラメータを追加する AddRequestParameter GatewayFilter を使用した設定を紹介する。
application.yml に以下のルート定義を追加:
spring:
cloud:
gateway:
routes:
- id: add_param_route
uri: lb://spring-cloud-producer
predicates:
- Method=GET
filters:
- AddRequestParameter=name, cuiyw
この設定により、/hello への GET リクエストに対して自動的に ?name=cuiyw が付与され、バックエンドサービスに転送される。
テスト
ゲートウェイおよびサービスを再起動後、以下の URL にアクセス:
http://localhost:8081/hello
このリクエストは内部で http://spring-cloud-producer/hello?name=cuiyw として処理され、対応するレスポンスが返される。