原文地址:
https://blog.csdn.net/jiao_fuyou/article/details/23186407
http://my.oschina.net/hncscwc/blog/195343
heartbeat通常用來檢測通信的對端是否存活(未正常關閉socket連接而異常crash)。其基本原理是檢測對應的socket連接上數據的收發是否正常,如果一段時間內沒有收發數據,則向對端發送一個心跳檢測包,如果一段時間內沒有回應則認為心跳超時,即認為對端可能異常crash了。
rabbitmq也不例外,heatbeat在客戶端和服務端之間用於檢測對端是否正常,即客戶端與服務端之間的tcp鏈接是否正常。
1. heartbeat檢測時間間隔的設置
1). 服務端的設置
heartbeat檢測時間間隔可在配置文件rabbitmq.config中增加配置項{heartbeat,Timeout}進行配置,其中Timeout指定時間間隔,單位為秒。
例如:
如果沒有進行配置,默認的時間間隔為600秒(最新版本3.2.2修改為580秒)
在rabbit.app中有heartbeat的配置項。
2). 客戶端的設置
根據AMQP協議,rabbitmq會通過connection.tune信令將heartbeat檢測時間間隔告知客戶端,客戶端可以根據需要重新設置該值,並通過Connection.tune-ok信令將時間間隔再告訴給rabbitmq,rabbitmq會以客戶端的時間作為該tcp連接上heartbeat檢測的間隔時間。
這里要注意的是:如果時間間隔配置為0,則表示不啟用heartbeat檢測。
C客戶端里:
AMQP_CALL amqp_login(amqp_connection_state_t state, char const *vhost,
int channel_max, int frame_max, int heartbeat,
amqp_sasl_method_enum sasl_method, ...);
參數heartbeat參數表示心跳頻率,60則表示每60S發一次心跳包
如果啟用了rabbitmq_management的話,從web控制台可以看到客戶端的檢測的時間間隔。