はじめに
前回の入門編では、Spring Cloud Gatewayの基本的なルーティング設定を紹介しました。今回は一歩進んで、カスタムフィルターの作成やCircuit Breakerの導入など、より実践的な内容を解説します。
🔧 カスタムフィルターの作成
Spring Cloud Gatewayでは、独自のフィルターをJavaコードで定義できます。
例:リクエストログを出力するフィルター
@Component
public class LoggingFilter implements GatewayFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("Request path: " + exchange.getRequest().getPath());
return chain.filter(exchange);
}
}
適用方法(Java Config)
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("log_route", r -> r.path("/log")
.filters(f -> f.filter(new LoggingFilter()))
.uri("https://httpbin.org/get"))
.build();
}
🧭 高度なルーティング設定
複数のPredicateを組み合わせる
predicates:
- Path=/api/**
- Method=GET
- Header=X-Request-Type, internal
この設定では、/api/** パスで GET メソッドかつ X-Request-Type: internal ヘッダーがあるリクエストのみを対象にします。
🛡️ Circuit Breakerの導入(Resilience4j)
Circuit Breakerとは?
Circuit Breaker 回路遮断器は、障害が発生しているサービスへのアクセスを一時的に遮断し、システム全体の安定性を保つためのパターンです。
例えば、バックエンドサービスがダウンしている場合、Gatewayが何度もリクエストを送るとリソースを無駄に消費してしまいます。Circuit Breakerは、一定回数失敗したら「回路を遮断」し、フォールバック処理に切り替えることで、ユーザー体験を損なわずにシステムを守ります。
依存関係追加(Maven)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
</dependency>
設定例
spring:
cloud:
gateway:
routes:
- id: circuit_route
uri: https://httpbin.org/status/500
predicates:
- Path=/fail
filters:
- name: CircuitBreaker
args:
name: myCircuitBreaker
fallbackUri: forward:/fallback
フォールバック用のController
@RestController
public class FallbackController {
@GetMapping("/fallback")
public ResponseEntity<String> fallback() {
return ResponseEntity.ok("Fallback response");
}
}
この構成では、/fail にアクセスしてバックエンドがエラーを返すと、Circuit Breakerが作動し、/fallback にリダイレクトされます。
📊 モニタリングとトレーシング
Spring Cloud Gatewayは、MicrometerやZipkinと連携して、メトリクス収集や分散トレーシングも可能です。
- Micrometer + Prometheus → ダッシュボードでリクエスト数やレスポンスタイムを可視化
- Zipkin → 各サービス間のトレースを確認
📌 まとめ
中級編では、以下の内容を紹介しました:
- カスタムフィルターの作成
- 高度なルーティング条件の設定
- Circuit Breakerの導入とフォールバック処理
- モニタリングとトレーシングの概要
次回は、認証・認可(OAuth2やJWT)との統合やRate Limitingの実装など、さらに実践的な内容を扱います。