2017-08-21 2 views
0

実際に私の使用状況はブローカーが使用できない状況を処理する必要があります。だから私はメッセージを送る前にブローカーの状態を知る必要がありますか?私は以下のsendtimeoutプロパティで試しましたが、まだ成功していません。メッセージが送信される前に、activemqブローカーの状態を確認する必要があります

<bean primary="true" id="jmsConnectionFactory" 
    class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="failover:(tcp://localhost:61616)" /> 
    <property name="useAsyncSend" value="true" /> 
    <property name="watchTopicAdvisories" value="false" /> 
    <property name="sendTimeout" value="2000" /> 

</bean> 

答えて

0
Connection conn = null; 
try { 
    conn = connectionFactory.createConnection(); 
    jmsTemplate.send(...); 
} 
catch (Exception e) { 
    ... 
} 
finally { 
    if (conn != null) { 
     conn.close(); 
    } 
} 

は、またはあなたがのtry/catch内での送信を行うだけですることができます。

さらに、ActiveMQConnectionFactoryCachingConnectionFactoryにラップして、送信ごとに接続を開かないようにしてください。

+0

私は下のようにactivemqで春を使用しているので、とにかく、私はProducerTemplateを使ってメッセージを送信しています。 .................................................. .................................................. ..................... ProducerTemplate tepm = camelContext.createProducerTemplate(); \t \t \t \t \t \t tepm.sendBody( "direct:a"、string);だから私はJavaコードで接続を呼び出さないでください。私はXMLファイル内のすべての接続を使用しました。 –

+0

元の質問では、ラクダには言及していませんでした。 –

+0

私はキャメルを使用してActiveMQを使用していますので、私はブローカーが利用できない状況に対処する必要があります。どうやってやるの ? –

0

「だから私は前にmesssagesを送るブローカーの状況を知っておく必要があります」

あり、ブローカーの状態を確認するためのさまざまなオプションは確かにあるが、これが本当に必要とされている場合、私は疑問に思いますか? ブローカが使用できないときにメッセージを送信しようとすると、その送信はすぐに失敗するはずです。私がプロデューサーがブロックされていると考えることができる唯一の理由は、プロデューサーがフロー制御される場合です。しかし、これはまた、ブローカが利用可能であり、フロー制御動作を構成できることを意味する(例えば、構成されたタイムアウト後に例外を投げる)。 メッセージを送信し、発生する可能性のある例外をキャッチするのは大丈夫です。

関連する問題