0

プロジェクトのJMS実装にactiveMQ5.4を使用しています。アプリケーションがメッセージの送信に失敗するたびにユーザーに通知したいのですが、例外の発生時にハンドルを取得できません。たとえば、JMSブローカーがダウンしていて、接続の作成、セッションなど、またはtryブロック内でメッセージ送信操作を実行した場合、接続に設定されたcatchブロックまたはExceptionListenerに制御が戻ることはありません。私のコードは次のようになります:

connection = (TopicConnection) (new ActiveMQConnectionFactory(localBrokerURL)).createConnection();
connection.setExceptionListener(new ExceptionListener() {               
    @Override
    public void onException(JMSException arg0) {
        System.out.println("Exception Occurred");
    }
});
connection.start();
final TopicSession session =conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
final Topic sendTopic = session.createTopic("someTopicName");

ここで、localBrokerURLの値は

failover://(ssl://localhost:61618?trace=true&wireFormat.maxInactivityDuration=0)

助けてください。ヒントは大歓迎です。

4

2 に答える 2

3

それがフェイルオーバーの目的です:トランスポート。トランスポートの失敗を隠し、自動的に再接続を試みて再接続し、新しい接続が確立されたときにjms状態を再生します。トランスポートを一時停止および再開するイベントを取得するために使用できるtransportListenerがあります。ブローカーのURLからfailover:コンポーネントを削除すると、すべての例外がクライアントに伝播されます。

于 2012-10-22T11:52:37.417 に答える
0

接続URIにプロパティを設定するだけtimeoutで、スレッドをブロックする代わりにエラーがスローされます...

failover://(ssl://localhost:61618?trace=true&wireFormat.maxInactivityDuration=0)?timeout=10000

http://activemq.apache.org/failover-transport-reference.htmlを参照してください

于 2012-10-23T19:47:41.873 に答える