2013-03-01 58 views
5

我使用的是帶有amq的rabbitMQ服務器。連接RabbitMQ服務器在600s後自動丟失

我有一個難題。單獨離開服務器約10分鐘後,連接丟失。

這可能是什麼原因造成的?

+0

你嘗試過創建連接時設置心跳值? – kzhen 2013-03-01 10:43:23

+0

@kzhen:你如何設置心跳值? – Hyeongsik 2013-03-02 04:11:57

+0

你正在使用哪個客戶端? – kzhen 2013-03-02 08:48:35

回答

2

如果你看一下Erlang的客戶端文檔http://www.rabbitmq.com/erlang-client-user-guide.html,你會看到一個標題爲連接部分給經紀人

這給你設置到的RabbitMQ服務器的連接時,你可以指定一些不同的選擇,其中一個選項是heartbeat,因爲您可以看到缺省值爲0因此沒有指定心跳。

我不知道確切的二郎符號,但你需要做的是這樣:

{ok, Connection} = amqp_connection:start(#amqp_params_network{heartbeat = 5}) 

心跳超時以秒爲單位。所以這會導致你的用戶每5秒鐘重新回到服務器。

也看看這個討論:https://groups.google.com/forum/?fromgroups=#!topic/rabbitmq-discuss/u227xzvqOr8

3

的RabbitMQ的連接工廠默認的連接超時是600秒(至少在Java客戶端API),因此您10分鐘。您可以通過向連接工廠指定選擇的超時時間來更改此設置。

確保您的連接在特定時間後釋放並重新創建,以防止最終泄漏和過量的資源是一種很好的做法。你的代碼應該確保它尋找一個不會被超時的有效連接,並且在那些超時的連接上重新建立一個新的連接。總體而言,採用連接池方法。

- Java示例:

ConnectionFactory factory = new ConnectionFactory(); 
    factory.setHost(this.serverName); 
    factory.setPort(this.serverPort); 
    factory.setUsername(this.userName); 
    factory.setPassword(this.userPassword); 
    factory.setConnectionTimeout(YOUR-TIMEOUT-IN-SECONDS); 

    Connection = factory.newConnection(); 
+4

錯誤。有兩個超時 - 一個存儲服務器端,一個只傳遞給'Socket.new'。後者默認爲0 == infinite,由'factory.setConnectionTimeout'控制。 – djechlin 2013-11-21 18:38:00

相關問題