2016-03-21 10 views
0

ActiveMQを使い始めようとしていて、サンプルコードを実行しました。それはこれに沸く:ActiveMQのタイムアウトAMQPのサンプルコード

JmsConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:=5672"); 
Connection connection = factory.createConnection(user, password); 
connection.start(); 
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
destination = session.createQueue("change"); 
MessageConsumer consumer = session.createConsumer(destination); 

while (true) { 
    Message msg = consumer.receive(); 
    «process» 
} 

Full code here

それは正常に動作しますが、私は1,2分のメッセージを送信しない場合、私は得る:

Exception in thread "main" javax.jms.JMSException: 
Transport closed due to the peer exceeding our requested idle-timeout 

私にはわかりませんどのくらいの頻度でメッセージを受け取ることが期待されますか(数百秒、1日になる可能性があります)。

  1. タイムアウトが発生しないように設定する必要のある設定オプションはありますか?

  2. クライアントを作成する正しい方法は何ですか?デフォルトでタイムアウトが発生するというのは、この方法を使用しないでください。

このようなブロックポーリングは私にとっては問題ありません。

私はActiveMQ 5.11.2を使用しています。私はactivemq consoleでサーバを稼動させています。

+0

あなたが使っているブローカーとバージョンは、十分ではありません。 –

+0

申し訳ありません。最新のすべて。私は更新します。 – Joe

答えて

0

クライアントがブローカから要求された内容を取得できないように、以前のブローカバージョンがAMQPハートビートをサポートしていなかったため、クライアントがタイムアウトしないように5.12.0+のActiveMQバージョンを使用する必要があります。ハートビートのサポートがthisの問題で追加されました。

ActiveMQのバージョン5.12.0より前では、AMQPサポートはまだ開発段階にあり、本番運用には推奨されませんでした。コードは多くのテストを経ており、最新のブローカリリース(5.13.2)はQpid JMSとともに使用すると非常に安定しています。

+0

ありがとう!これは、現在のリリースがバグであることを意味しますか? – Joe

+0

現在のリリースは5.13.2で、あなたは5.11.2を使用していると言いますので、あなたの現在の定義に依存します。 –

+0

私の間違い申し訳ありませんが、私はパッケージマネージャー(醸造所)を使用していることに気付きました。私が本当に意味していたのは、「この例のデモコードは、箱から出て行くかどうか、そして5.13.2に当てはまりますか?」でした。答えのような音は「はい、いいえ」ですか? – Joe