Spring JMS MessageListenerAdapterを正常にシャットダウンする方法

StackOverflow https://stackoverflow.com/questions/1028025

  •  06-07-2019
  •  | 
  •  

質問

JMSキューから消費し、結果を別のJMSキューに送信するメッセージハンドラがあります。メッセージハンドラは、Spring DefaultMessageListenerContainerにあります。 コンテナがシャットダウンしたら、すでに消費したリクエストの処理を終了し、結果を送信したいと思います。同時に、リクエストキューからの新しいメッセージを消費しなくなります。

今、特別なシャットダウンプロビジョニング安全なApplicationContext.registerShutdownHook()がないため、コンテナーは保留中のlisternerMethod呼び出しが返されるまで待機しますが、結果は応答キューに送信されません。

実行中のハンドラーによって生成された応答が応答キューに送信されるようにするための適切なアプローチは何ですか?

役に立ちましたか?

解決

行く方法は、 DisposableBean インターフェースまたは @PreDestroy アノテーションを介して導く必要があると思います。私見の重要なことは、SpringにDMLCをシャットダウンさせるのではなく、現在「システム内」のメッセージを認識しているコンポーネントによってこれを行わせることです。このようにして、現在処理中のメッセージが終了するのを待っている間に、新しいメッセージのリッスンを停止します。

Bean宣言で depends-on 属性を使用して、シャットダウンするBeanの順序を定義することもできます。詳細については、 Springリファレンスをご覧ください。ドキュメント

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top