RabbitMQ允许您"心跳"连接,即客户端和服务器不时检查(使用空消息)对方仍然存在且可用.到现在为止还挺好.
不幸的是,我无法在文档中找到建议的地方,这是一个合理的价值.我知道你需要在几秒钟内指定心跳,但什么是真实世界的最佳练习值?
显然,它不应该太频繁(流量),但也不是太罕见(代理,......).有什么建议?
15秒好吗?30?60?...?
这个答案如果对于RabbitMQ <3.5.5,对于较新的版本,请参阅@bmaupin的答案.
这取决于您的应用需求.开箱即用,RabbitMQ为10分钟.如果您未能两次激活心跳(20分钟不活动),则会立即关闭连接而不发送任何connection.close方法或来自代理端的任何错误.
使用心跳的情况是防火墙在长时间连接时关闭非活动状态,或者某些其他网络设置不允许您等待连接.
事实上,来自RabbitMQ配置文档的听力不是必须的
心跳
表示服务器在connection.tune帧中发送的心跳延迟(以秒为单位)的值.如果设置为0,则禁用心跳.客户端可能不遵循服务器建议,有关详细信息,请参阅AMQP参考.禁用心跳可能会在具有大量连接的情况下提高性能,但可能会导致在存在关闭非活动连接的网络设备时连接中断.默认值:580
注意,听觉间隔太短可能会导致显着的网络开销.请记住,当听力时间间隔连接上没有其他活动时,会发送听觉帧.
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)