2016-03-21 50 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

它工作正常,但如果我不爲一兩分鐘發送消息,我得到:

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

我不知道我期望得到消息的頻率(可能是幾百秒,可能是一天一次)。

  1. 是否有一些配置選項,我需要設置,所以永遠不會超時?

  2. 什麼是寫客戶端的正確方法?是否有一個很好的理由默認有超時,這意味着我不應該使用這種方法?

阻止這樣的投票對我來說很好。

我正在使用ActiveMQ 5.11.2。我使用activemq console運行服務器並使用任何默認配置。

+0

你使用什麼經紀人和版本,沒有足夠的信息來幫助 –

+0

抱歉。最新的一切。我會更新。 – Joe

回答

0

您需要使用5.12.0+的ActiveMQ版本,以便客戶端不超時,因爲較早的代理版本不支持AMQP心跳,所以客戶端無法從代理獲取所需內容。在this問題下添加了對心跳的支持。

在ActiveMQ 5.12.0版之前,AMQP支持仍處於開發狀態,不推薦用於生產用途。代碼經過了大量測試,最新的代理版本(5.13.2)在與Qpid JMS一起使用時非常穩定。

+0

謝謝!這是否意味着當前版本是越野車? – Joe

+0

當前版本是5.13.2,你說你在使用5.11.2,所以它取決於你對電流的定義。 –

+0

對不起我的錯誤,我意識到我正在使用包管理器(brew)。我真正的意思是「這個例子中的演示代碼是否可以用於開箱即用,5.13.2是否正確?」。聽起來像答案是「是和否」? – Joe