心跳檢測
更新時間 2023-07-03 21:29:59
最近更新時間: 2023-07-03 21:29:59
分享文章
介紹分布式消息服務RabbitMQ心跳檢測功能。
使用場景
網絡在很多情況下會失敗,有時情況很微妙(比如 丟包率很高)。操作系統檢測到 TCP 斷開是一個適中的時間(在 Linux 中默認時長是 11 分鐘)。AMQP 0-9-1 提供心跳檢測功能來確保應用層及時發現中斷的連接(或者是完全沒有工作的連接)。 心跳檢測還能保護連接不會在一段時間內沒有活動而被終止。
心跳超時時間
心跳 timeout 值決定了 TCP 相互連接的最大時間,超過這個時間,該連接將被 RabbitMQ 和 客戶端當作不可到達。這個值是在 RabbitMQ 服務器和客戶端連接的時候協商的。客戶端需要配置請求心跳檢測。
心跳幀
心跳幀每隔 timeout/2 時間會發送一次。連續兩次心跳失敗后,連接將會當作不可到達。不同客戶端對此的表現不同,但是 TCP 連接都會關閉。當客戶端檢測到 RabbitMQ 服務節點不可到達,它需要重新發起連接。
任何連接數據交換(例如 協議操作、發布消息、消息確認)都會計入有效的心跳。客戶端可能也會發送心跳包,在連接中有其他數據交換,但有些只在需要時發送心跳包。
在客戶端設置心跳超時時間
Java 客戶端中設置心跳時間
ConnectionFactory cf = new ConnectionFactory();
cf.setRequestedHeartbeat(30);