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只能设置比它小的值,不能比它大。
本文详细介绍了RabbitMQ中的心跳机制,包括心跳超时值的定义及其如何帮助判断TCP连接的状态。文中还解释了心跳间隔与超时值的区别,并提供了Java代码示例来展示如何设置心跳超时。
5049

被折叠的 条评论
为什么被折叠?



