RabbitMQ允许你进入心跳"连接,即客户端和服务器不时检查(使用空消息)另一方仍在那里并且可用。到目前为止,非常好。
不幸的是,我无法在文档中找到建议的地方,这是一个合理的价值。我知道您需要在几秒钟内指定心跳,但实际上最佳实践值是什么?
显然,它不应该太频繁(流量),但也不是太罕见(代理,......)。有什么建议吗?
15秒好吗? 30? 60? ...?
答案 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)