0

私は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 に特に関心があります。

4

0 に答える 0