2011-07-27 21 views
3

ActiveMQ接続からセッションオブジェクトを作成するときにタイムアウトを設定する方法はありますか?ActiveMQ createSession timeout

次のように私はルックスを使用しているコード:

ConnectionFactory factory = Settings.getJmsConnectionFactory(ip); 
connection = factory.createConnection(); 
// insert timeout here 
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
Topic topic = session.createTopic(Settings.Topic); 
MessageConsumer consumer = session.createConsumer(topic); 
consumer.setMessageListener(this); 
connection.start(); 

これは限りメッセージサーバがすでに起動されて正常に動作します。それ以外の場合は、createSession呼び出しがブロックされます。アプリケーションをブロックするのを避けるために別のスレッドで実行することもできましたが、それを行うための「クリーン」な方法があるかどうかを尋ねると思いました。

乾杯、 マックス

答えて

2

あなたはそれがのCreateSession上だと確信しています()を呼び出しますか?サーバーが使用できない場合は、createConnection()で失敗するはずです。サーバーが稼働しておらず、failover transportを使用している場合は、デフォルト設定を使用して永久に再接続しようとします。フェールオーバートランスポートのトランスポートオプションについては、修正方法を参照してください。

+2

createConnectionは正常に動作します。 – Max

+0

私は数年前からActiveMQを使ってきましたが、このようなことは一度もありませんでした。それは常にcreateConnection()で失敗するか、それ以外の場合はすべて接続されます。ブローカーと同じJVMで何かをやっていて、何とかそれが失速するかもしれませんか? –

+2

私は、永久に再接続しようとするフェールオーバーと同じ問題がありました。無限ループを防ぐために、私たちのアクティブなmqサービスURLの終わりにquery文字列としてtransport.startupMaxReconnectAttempts = 6(または何でも選択してください)を追加しました。今それは適切に失敗します。 – lcrepas