RabbitMQ之心跳检测

版权声明:本文为博主原创文章,未经博主允许不得转载。 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节点不可到达时,应该尝试重新连接。
不要混淆timeoutinterval这两个值,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只能设置比它小的值,不能比它大。

猜你喜欢

转载自blog.csdn.net/MoSee/article/details/80990120