問題タブ [spring-retry]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - maxDelay が設定されていない場合、Spring retryTemplate の起動が早すぎる
RetryTemplate に 300000 ミリ秒の遅延を持たせたい - 試行ごとに 5 分に 1.1 を掛けたもの。ただし、次の試行を 30 秒遅らせるだけです。簡単な例を次に示します。
ログは次の時刻に作成されます。
スケジューラーを使用しても使用しなくても違いはありません (元のコードでは初期遅延が必要なため、スケジューラーが存在します)。
maxDelay を@Backoff
意図したとおりに動作します - 5 分後に発火し、次に 5*1.1 分後に発火します。ただし、@Backoff - maxDelay の javadoc を読むと、デフォルトは 0 であり、遅延未満の場合は無視されると書かれています
わからなかったことはありますか?maxDelay のデフォルトは 30 秒のようですが、これは javadoc の説明とはかなり異なります。
使用されたスプリングリトライのバージョンは 1.1.3 です
java - Spring Retry: NeverRetryLogic が ExceptionClassifierRetryPolicy で期待どおりに機能しない
再試行シナリオ (http 送信ゲートウェイに関連) で作業しています。再試行ロジックは非常にうまく機能していますが、再試行しないロジックにはバグがあるようです。
私がやりたいことは、404,500,503,504 とは異なる http ステータス エラーが発生した場合に再試行しないことです。
それをテストするために、成功する前に X 回の http ステータス エラーで応答するように構成できる構成可能なエンドポイントがあります。
たとえば、最初にヒットしたときにエンドポイントが http 400 ステータスを取得するように構成できます。その後、再試行すると、成功した応答が返されます。
とは言っても、私が期待していたのは、エンドポイントが初めて http 400 ステータスを取得するように構成したときに、再試行しないことですが、それは機能していないようです。
再試行しないシナリオに対して私が持っているロジックは次のとおりです。
CustomRetryPolicy は次のとおりです。
NeverRetryPolicy
クラスによると、これを行う必要があります。
最初の試行は許可するが再試行は許可しない RetryPolicy。また、スタブとしてのテスト目的など、他のポリシーの基本クラスとしても使用できます。
したがって、私の理解では、最初の試行はエンドポイントに到達したときであり、http 400 エラーステータスを受け取り、再試行することはありません。
それの何がいけないの?
java - Spring Retry Junit: カスタム再試行ポリシーを使用した再試行テンプレートのテスト
カスタム再試行ポリシーを使用している再試行テンプレートをテストしようとしています。そのために、次の例を使用しています。
基本的に、私の目標は、特定の http エラー ステータス (http 500 エラー ステータスなど) を取得したときに再試行ロジックをテストすることです。
これは私のjunitのxmlコンテキストです:
どこCustomRetryPolicy
に似ています:
そして、私がテストしている Java クラスは次のとおりです。
私は何を間違っていますか?私の理解では、コールバックを使用して応答をモックしているので、(カスタムの再試行ポリシーを使用して) その応答を処理できます。また
[アップデート]
この junitを複製しようとすると、同じ例外が発生します。最も具体的には、ここのMockRetryCallback
クラス内で例外をインスタンス化しようとすると失敗します: