2010-01-15 54 views
2

試圖用ActiveMq做簡單的pub/sub。我可以很好地工作,但約30秒後用戶斷開連接。我找了一個超時類型的值,我可以改變,但似乎沒有任何工作。這裏是用戶:ActiveMq NMS在大約30秒後斷開

using System; 
using Apache.NMS; 
using Apache.NMS.ActiveMQ; 
using Apache.NMS.ActiveMQ.Commands; 

namespace ActiveMQCatcher 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/"); 

      using (IConnection connection = factory.CreateConnection()) 
      { 
       connection.ClientId = "MYID"; 
       connection.Start(); 

       using (ISession session = connection.CreateSession()) 
       { 
        IMessageConsumer consumer = session.CreateConsumer(new ActiveMQTopic("MYTOPIC"), null, false); 
        consumer.Listener += consumer_Listener; 

        Console.ReadLine(); 
       } 

       connection.Stop(); 
      } 
     } 

     private static void consumer_Listener(IMessage message) 
     { 
      Console.WriteLine("Got: " + ((ITextMessage) message).Text); 
     } 
    } 
} 

我嘗試這樣做:

connection.RequestTimeout = TimeSpan.MaxValue; 

但它似乎沒有任何改變。

爲了解決問題,只需運行程序並等待約30秒。您可以看到ActiveMQ控制檯中的連接消失(默認爲http://localhost:8161/admin/connections.jsp

任何想法?

回答

1

當然我在問題發佈後幾分鐘就知道了。以下是其他人尋找的答案:

問題是NMS正在使用OpenWire,而OpenWire在默認情況下有30秒的超時時間。您可以在\ conf \ ActiveMq.xml文件中更改它。以下是您需要更改的內容:

<transportConnectors> 
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?wireFormat.maxInactivityDuration=0"/> 
</transportConnectors> 

wireFormat.maxInactivityDuration參數是關鍵。

1

警告! 看來,如果你設置maxInactivityDuration=0那麼套接字永遠不會死亡。 即使您在IConnection上調用CloseDispose,底層連接和它所運行的線程仍然保留。 根據您的實現,這可能意味着內存泄漏。

+0

好的。現在我必須像這樣實現它,因爲知道有泄漏的可能性。還沒有找到更好的方法。 – Kelly 2010-08-11 23:31:59

0

不知道這是否是一個答案或更多的問題(或兩個)的,

但在我們的NMS使用,我們指定wireFormat.MaxInactivityDuration = -1在連接URL客戶端 。

似乎有同樣的效果,但我們應該使用「-1」或「0」...... ?? 不知道,有什麼區別...

另外,有趣的是,不知何故,我們不指定任何東西在服務器配置,但我們所有的JAVA應用程序連接似乎保持連接無論是(因爲JAVA客戶端使用不同的默認對於OpenWire config.params或smtng?)

+0

好吧,我發現「-1」與「0」相同 http://activemq.apache.org/configuring-wire-formats.html – 2010-06-03 11:15:40

1

聽起來就像您使用的是舊版本的NMS,請嘗試更新到最新版本(1.5.5),並且此問題應該消失。有幾個與故障轉移和不活動監視器相關的問題已在最近的幾個版本中得到解決。最新版本已經過硬化。

Tim Fusesource.com