2014-03-01 57 views
0

如果rabbitmq客戶端連接到服務器並長時間不發送消息,是否可以通過編程來監視和關閉它們的連接?如何獲取這些相關信息?如何重新記錄連接資源?

+0

這個問題很難回答。如果你已經添加了一些代碼作爲例子,那麼提出一個簡潔的答案會更容易。 –

回答

0

兩件事情將確保不會發生這種情況:在適當的時候

  • 你的包無法通過TCP得到。這將由內核處理,您將收到連接關閉錯誤。如果你正確地配置你的客戶端,它會告訴你這是事實,然後你就可以處理這個問題。最簡單的方法是監視你擁有的頻道的Pid,然後在它死亡時做出反應,但也許有其他方法(我不記得細節)。

  • RabbitMQ keepalive數據包沒有及時到達。這將強制終止連接。與上述相同。有一個監視器將有所幫助。 rabbitmq Erlang客戶端中的「Channel」爲Pid,因此可以對其進行監控(erlang:monitor(process, Pid))。

  • 您設法發送消息,但沒有消息傳遞到的隊列。這可以通過訂閱頻道事件來處理。您將收到RabbitMQ的312 - No Route消息。