JMS キュー (WebSphere 7) をリッスンする Spring プロジェクト (3.0.5) があります。キュー リスナーのオン/オフを切り替える機能が必要です。現在、独自の RESTful エンドポイントを介して DefaultMessageListenerContainer.start() および stop() をプログラムで呼び出して、リスナーのオン/オフを切り替えています。
リスナーを 2 ~ 3 回 (オン/オフ/オンまたはオン/オフ/オン/オフ/オン) 切り替えた後、リスナーがハング状態になり、オフに切り替えることができないことがわかりました。
何が起こっているかをデバッグするために、ログ レベルを Trace に設定します。リスナーが正常にオンになると、ログに次のメッセージが表示されます。
XXXX-XX-XX [myListenerContainer-1] TRACE cgcrcmMessageListenerContainer - doReceiveAndExecute - セッション [com.ibm.mq.jms.MQQueueSession@1872c950] のコンシューマー [com.ibm.mq.jms.MQQueueReceiver@45486b51] がメッセージを受信しませんでした
ただし、リスナーがハングする前に最後にオンにすると、ログにこのメッセージが表示されません。
その他の詳細:
- ハング状態への移行は、キューにメッセージが入っているかどうかに関係なく再現可能です。
- ハングする前にリスナーを最後にオンにしたときに、メッセージをキューに入れることでハング状態を「修正」できます。メッセージが受信されると、ログに正常なトレース メッセージが表示され、リスナーをオフに切り替えることができます。