RabbitMQ中心跳的合理值是多少?

时间:2014-09-22 23:29:05

标签: rabbitmq

RabbitMQ允许你进入心跳"连接,即客户端和服务器不时检查(使用空消息)另一方仍在那里并且可用。到目前为止,非常好。

不幸的是,我无法在文档中找到建议的地方,这是一个合理的价值。我知道您需要在几秒钟内指定心跳,但实际上最佳实践值是什么?

显然,它不应该太频繁(流量),但也不是太罕见(代理,......)。有什么建议吗?

15秒好吗? 30? 60? ...?

2 个答案:

答案 0 :(得分:12)

这个答案是否适用于RabbitMQ< 3.5.5,对于较新版本,请参阅@bmaupin的答案。

这取决于您的应用需求。开箱即用,RabbitMQ为10分钟。如果您未能两次激活心跳(20分钟不活动),则会立即关闭连接而不发送任何connection.close方法或来自代理端的任何错误。

使用心跳的情况是防火墙在长时间连接时关闭非活动状态,或者某些其他网络设置不允许您等待连接。

事实上,听证会不是必须的,来自RabbitMQ config doc

  

<强>心跳

     

表示服务器在connection.tune帧中发送的心跳延迟(以秒为单位)的值。如果设置为0,则禁用心跳。客户端可能不遵循服务器建议,有关详细信息,请参阅AMQP参考。禁用心跳可能会在具有大量连接的情况下提高性能,但可能会导致在存在关闭非活动连接的网络设备时连接中断。   默认值:580

请注意,听觉间隔太短可能会导致显着的网络开销。请记住,当听觉时间间隔连接上没有其他活动时,会发送听觉帧。

答案 1 :(得分:4)

RabbitMQ文档现在提供5到20秒之间的建议心跳超时值:

  

设置心跳超时值太低会导致误报(由于瞬时网络拥塞,短暂的服务器流控制等原因,对等体被视为不可用,而实际情况并非如此)。选择超时值时应考虑这一点。

     

来自用户和客户端库维护人员的几年反馈意见表明,低于5秒的值很可能导致误报,1秒或更低的值很可能会这样做。对于大多数环境,5到20秒范围内的值是最佳的。

来源:https://www.rabbitmq.com/heartbeats.html#false-positives

此外,从RabbitMQ 3.5.5开始,默认心跳超时值为60秒(https://www.rabbitmq.com/heartbeats.html#heartbeats-timeout