2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【応用編】Spring Cloud GatewayでAPIゲートウェイを作ってみる -カスタムフィルター、Circuit Breaker-

Last updated at Posted at 2025-09-09

はじめに

前回の入門編では、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の実装など、さらに実践的な内容を扱います。


📝 参考リンク

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?