2017-10-16 3 views
0

Spring Core Advice API docs定義されたアドバイスの2種類があります。

  • クラスごとのアドバイス - 「プロキシになるオブジェクトの状態に依存したり新しい状態を追加」してはならない
  • インスタンスごとのアドバイス - のJavadocあたり、

RequestHandlerRetryAdvice「をプロキシオブジェクトに状態を追加」と、ステートレス操作のステートフル・モードを有します。

RequestHandlerRetryAdviceをクラスごとのアドバイスとして使用できる条件はありますか。 (つまり、単一のBeanを使用して複数のハンドラに助言する)。

「ステートレスモード」はクラスごとのアドバイスとして使用できますか?

"ステートフルモード"のインスタンスをクラスごとのアドバイスとして使用できますか?

RequestHandlerRetryAdviceがプロキシオブジェクトに状態を追加するかどうかについての情報は、Spring Coreリファレンスに記載されているように、クラス単位/オブジェクト単位のアドバイスの条件基準を適用するために必要な条件です。

ステートフルモードでは、アドバイスをクラスごとに使用することはできません。

ステートレスモードでは、状態を拡張するかどうかは不明ですが、 (複数のハンドラによって共有されている場合は、最大で1人が何度も再試行アドバイスを使用する必要があります)

an answer in another postは、スレッドセーフであるため、常に可能であることを示します。しかし、Spring Coreのリファレンスドキュメント(上記参照)によると、この条件はクラスごとの使用を許可するには不十分です。

答えて

0

この環境でステートフルリトライを使用すると、状態は(通常は)メッセージごとに維持され、ハンドラごとには維持されません。同一の識別子を生成するメッセージが異なるスレッドで同時に複数のハンドラにヒットすることが予想されない限り、(同じことは非常に珍しい)同じアドバイスを複数のハンドラで使用することができます。しかし、そのような場合でも、適切な状態ジェネレータで対応することができます。再試行ステートフルを作るためにSpring Integration Documentation ...

から

、我々はRetryStateGenerator実装とアドバイスを提供する必要があります。このクラスは、RetryTemplateがこのメッセージの再試行の現在の状態を判断できるように、メッセージを再送信と識別するために使用されます。フレームワークは、SpelExpressionRetryStateGeneratorを提供し、SpEL式を使用してメッセージ識別子を決定します。

+0

ステートレスリトライについては、これはいつでも安全ですよね? (私はちょうど確かめたい - アドバイスの下のオブジェクト階層のどれも状態を保持していないということだけをコードから読み取ることはできませんでした) –

+0

;維持する状態はありません。サーキットブレーカのアドバイスも安全です。各ターゲットの状態を維持します。 –

+0

すべてクリアです。ありがとうございました ! –

関連する問題