私はQueueReceiver
、特にreceiveNoWait
メソッドを使用して、キューメッセージを同期的に消費する JMS クライアントに取り組んでいます。receive
との両方receiveNoWait
が をスローするように指定されてJMSException
います。これは、これが JMS 障害を検出する信頼できる方法であることを意味します。
try {
Message message = queueReceiver.receiveNoWait();
// handle message
} catch (JMSException e) {
// handle failure
}
ただし、JMS 仕様 (1.1) および のオンライン ドキュメントでは、次のように登録について説明されていExceptionListener
ます。
一部の接続はメッセージのみを消費するため、接続が失敗したことを知る方法は他にありません。
これは、メッセージ リスナーを使用した非同期消費に必ず当てはまることは理解していますが、上記のステートメントでは、同期消費と非同期消費を区別していないようです。これは、接続が失敗したことを知るために、私のプログラムには例外リスナーを登録する以外に「他の方法がない」ことを意味すると解釈すべきでしょうか。接続に失敗しましたか?そのために実際に例外リスナーを登録する必要がありますか?
これが標準で決定されていない場合、一般的に JMS プロバイダーはこれをどのように処理しますか? JBoss、Websphere Application Servers Service Itegration Bus、Websphere MQ、および Weblogic JMS に特に関心があります。