2013-11-21 43 views
2

打開http://rmq.example.com:15672/#/connections顯示打開的連接及其屬性。一個屬性被稱爲「超時」。對於使用RabbitMQ Java客戶端進行的連接,此值設置爲600.對於使用node-amqp庫進行的連接,它是空白的。RabbitMQ中的服務器端超時是什麼?

我無法弄清楚如何改變它,甚至必須改變它。在Java庫中,有一個ConnectionFactory與方法setTimeout,但它設置超時以毫秒傳遞到Socket.connect,即它是一個客戶端超時,它不會服務器(實際上它不符合600s顯示在RMQ的頁面上)。我也嘗試添加timeout,connectionTimeoutconnection_timeout作爲客戶端屬性,但這些不影響timeout。事實上,它們分別顯示在客戶端屬性(通過REST API選中):

"client_properties":{"connectiontimeout":"40000", 
"connectionTimeout":"30000", 
"connection_timeout", ... } 

我不知道是不是數字「600系列」是從客戶端發送或者是服務器默認,甚至是什麼確實。我正在通過Java庫和node-amqp的源代碼尋找一些證據,但想問問任何人是否有更高層次的知識。

回答

4

這是心跳。這synonymizing是顯而易見的唯一地方是man page for rabbitmqctl

timeout 
    Connection timeout/negotiated heartbeat interval, in seconds. 

在Java客戶端,這是通過ConnectionFactory.setRequestedHeartbeat(int seconds)設置。我讀過心跳是服務器知道連接何時死亡的必要條件,但我不知道爲什麼會出現這種情況,因爲AMQP是應用層協議,不是傳輸層,傳輸層管理連接何時開始和結束。