web-dev-qa-db-ja.com

アマゾンウェブサービスのAPI再試行ロジック

http://docs.aws.Amazon.com/general/latest/gr/api-retries.html

このドキュメントでは、「各AWS SDKはJavaのリクエストを自動的に再試行するための自動再試行ロジックとAWS SDKを実装している」と述べています。

Java AWS SDK、リトライ構成を指定しない場合のデフォルトのメカニズムは何ですか?Java AWS SDKを使用しており、簡単に取得できますAWSサービス側で何かが失敗した場合のサービス例外。「自動」再試行メカニズムは経験したことがありません。この再試行メカニズムについて誰かが説明できますか?

12
WillMcavoy

同じドキュメントのページは言う:

JavaのAWS SDKは自動的にリクエストを再試行します。ClientConfigurationクラスを使用して再試行設定を構成できます。

公式ドキュメントで ClientConfiguration を確認する必要があります。再試行ロジックに関する動作を調整するためのメソッドがたくさんあります。ここで最も重要です:

  • withMaxErrorRetry失敗した再試行可能なリクエストの再試行の最大数を設定します(例:サービスからの5xxエラー応答)
  • withRequestTimeoutリクエストが完了するまで待機する時間(ミリ秒)を設定してから、中止してタイムアウトします[...]
  • withThrottledRetries再試行の調整は、リクエストの大部分が失敗し、再試行が失敗した場合に、再試行をインテリジェントに調整する機能です[...]
  • withRetryPolicy これは最も興味深いもので、 RetryPolicy を選択して変更できます:
    • BackoffStrategy再試行間のスリープ時間を制御するカスタムバックオフ戦略を提供するためのフック
    • RetryCondition失敗したリクエストを再試行する必要があるかどうかに関するカスタム条件を提供するためのフック
    • maxErrorRetry
    • honorMaxErrorRetryInClientConfig(上記の構成設定を尊重するかどうか)

また、自動再試行メカニズムに気付いていない場合は、クライアント側のエラーが原因である可能性もあります。これらの設定は、サーバー(5xx)またはスロットリングエラーの場合にリクエストを再試行するためのものです。

クライアントエラー(4xx)は、再試行する前に要求を修正して問題を修正する必要があることを示します

「サービス側」が失敗したと主張する場合は、状況を再現して実際に何が起こっているかを分析するためのコードを提供する必要があります。


次にデフォルトについて:

Java SDKのデフォルトのメカニズムは何ですか、再試行構成を指定しない場合はどうなりますか?

ClientConfiguration定数フィールド のデフォルト値を検索できます。ただし、使用するサービスによって異なる場合があることに注意してください(特にDynamoDBは特殊なケースです)。 PredefinedClientConfigurations および PredefinedRetryPolicies クラスも確認してください。

16
laughedelic