最新の安定バージョンについては、Spring Cloud Gateway 5.0.1 を使用してください! |
Retry GatewayFilter ファクトリ
Retry GatewayFilter ファクトリは、以下のパラメーターをサポートします。
retries: 試行する必要のある再試行の回数。statuses:org.springframework.http.HttpStatusを使用して表される、再試行する必要のある HTTP ステータスコード。methods:org.springframework.http.HttpMethodを使用して表される、再試行する必要のある HTTP メソッド。series:org.springframework.http.HttpStatus.Seriesを使用して表される、再試行される一連のステータスコード。exceptions: 再試行する必要があるスローされた例外のリスト。backoff: 再試行用に構成された指数バックオフ。再試行は、firstBackoff * (factor ^ n)のバックオフ間隔の後に実行されます。ここで、nは反復です。maxBackoffが構成されている場合、適用される最大バックオフはmaxBackoffに制限されます。basedOnPreviousValueが true の場合、バックオフはprevBackoff * factorを使用して計算されます。jitter: 再試行用に設定されたランダムジッタ。[backoff - backoff*randomFactor, backoff + backoff*randomFactor]間のバックオフを生成するtimeout: 再試行用に設定されたタイムアウト。
有効になっている場合、Retry フィルターには次のデフォルトが構成されています。
retries: 3 回series: 5XX シリーズmethods: GET メソッドexceptions:IOExceptionおよびTimeoutExceptionbackoff: 無効jitter: 無効timeout: 無制限
次のリストは、再試行 GatewayFilter を構成します。
spring:
cloud:
gateway:
routes:
- id: retry_test
uri: http://localhost:8080/flakey
predicates:
- Host=*.retry.com
filters:
- name: Retry
args:
retries: 3
statuses: BAD_GATEWAY
methods: GET,POST
backoff:
firstBackoff: 10ms
maxBackoff: 50ms
factor: 2
basedOnPreviousValue: false
jitter:
randomFactor: 0.5
timeout: 100msforward: プレフィックス付き URL で再試行フィルターを使用する場合は、エラーが発生した場合にクライアントにレスポンスが送信されてコミットされる可能性のある処理を行わないように、ターゲットエンドポイントを慎重に記述する必要があります。例: ターゲットエンドポイントがアノテーション付きコントローラーである場合、ターゲットコントローラーメソッドはエラーステータスコードで ResponseEntity を返さないようにする必要があります。代わりに、Exception をスローするか、エラーを通知する必要があります(たとえば、Mono.error(ex) の戻り値を介して)。これは、再試行によって処理するように再試行フィルターを構成できます。 |
| 再試行フィルターを使用すると、その後に続くすべてのフィルターが再試行されます。再試行フィルターの後のフィルターを複数回実行した場合、その結果が期待どおりであることを確認してください。 |
本文のある HTTP メソッドで再試行フィルターを使用すると、本文がキャッシュされ、ゲートウェイのメモリが制限されます。本文は、ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR で定義されたリクエスト属性にキャッシュされます。オブジェクトの型は org.springframework.core.io.buffer.DataBuffer です。 |
簡略化された「ショートカット」表記は、単一の status および method で追加できます。
次の 2 つの例は同等です。
spring:
cloud:
gateway:
routes:
- id: retry_route
uri: https://example.org
filters:
- name: Retry
args:
retries: 3
statuses: INTERNAL_SERVER_ERROR
methods: GET
backoff:
firstBackoff: 10ms
maxBackoff: 50ms
factor: 2
basedOnPreviousValue: false
jitter:
randomFactor: 0.5
timeout: 100ms
- id: retryshortcut_route
uri: https://example.org
filters:
- Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false,0.5,100ms