Spring Cloud Gateway のサービス連携とフィルター活用

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 として処理され、対応するレスポンスが返される。

タグ: Spring Cloud Gateway Eureka API Gateway 微サービス フィルター

7月2日 21:34 投稿