Spring JMS MessageListenerAdapterを正常にシャットダウンする方法
質問
JMSキューから消費し、結果を別のJMSキューに送信するメッセージハンドラがあります。メッセージハンドラは、Spring DefaultMessageListenerContainerにあります。 コンテナがシャットダウンしたら、すでに消費したリクエストの処理を終了し、結果を送信したいと思います。同時に、リクエストキューからの新しいメッセージを消費しなくなります。
今、特別なシャットダウンプロビジョニング安全なApplicationContext.registerShutdownHook()がないため、コンテナーは保留中のlisternerMethod呼び出しが返されるまで待機しますが、結果は応答キューに送信されません。
実行中のハンドラーによって生成された応答が応答キューに送信されるようにするための適切なアプローチは何ですか?
解決
行く方法は、 DisposableBean
インターフェースまたは @PreDestroy
アノテーションを介して導く必要があると思います。私見の重要なことは、SpringにDMLCをシャットダウンさせるのではなく、現在「システム内」のメッセージを認識しているコンポーネントによってこれを行わせることです。このようにして、現在処理中のメッセージが終了するのを待っている間に、新しいメッセージのリッスンを停止します。
Bean宣言で depends-on
属性を使用して、シャットダウンするBeanの順序を定義することもできます。詳細については、 Springリファレンスをご覧ください。ドキュメント。
所属していません StackOverflow