版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MoSee/article/details/80990120
Heartbeat超时值
heartbeat超时值定义了RabbitMQ及其client库在多久之后认为TCP连接不可到达。这个值是在client连接RabbitMQ服务器的时候协商好的,在RabbitMQ 3.0及以上版本,broker缺省就会自动尝试进行heartbeat协商,而对于低版本则必须由client在连接时显示地请求协商。该值单位为秒,缺省是60秒。
每隔timeout / 2
秒发送一个Heartbeat消息帧,这个值有时被称作heartbeat interval
,如果连续丢失两个heartbeats消息帧,就认为tcp连接中断了。不同的client表现不同,但是都会关闭tcp连接。当客户端通过heatbeat机制检测到RabbitMQ节点不可到达时,应该尝试重新连接。
不要混淆timeout
和interval
这两个值,RabbitMQ以及官方提供的client库都使用timeout
,而某些client库使用的是interval
。
只要链路上有消息在传递,那么就认为是有效的heartbeat
,client可以不考虑链路上是否有消息传递就发送heartbeat
消息帧,也可以只在必要时才发。
可以把timeout
设置成0来禁用heartbeat
,但是实践中不建议这么用。
Java代码启用Heartbeat
Java客户端代码中在连接之前,通过调用ConnectionFactory#setRequestedHeartbeat
来和服务器协商timeout
值。
ConnectionFactory cf = new ConnectionFactory();
// set the heartbeat timeout to 60 seconds
cf.setRequestedHeartbeat(60);
注意:当服务器配置了非0的timeout值情况下,client只能设置比它小的值,不能比它大。