java的原生rabbitmq客户端允许在连接设置上设置心跳,例如:
item()
使用心跳设置的rabbitmq客户端是什么? 它是否向特殊交换/队列发送存根消息或者其他什么呢?
有人可以详细解释一下吗?
答案 0 :(得分:10)
来自RMQ Heartbeat documentation:
网络可能在很多方面失败,有时非常微妙(例如,高比率丢包)。中断的TCP连接需要相当长的时间(例如,在Linux上使用默认配置大约需要11分钟)才能被操作系统检测到。 AMQP 0-9-1提供心跳功能,以确保应用程序层及时发现中断的连接(以及完全没有响应的对等体)。 Heartbeats还可以防御可能终止“空闲”TCP连接的某些网络设备。
这不是对队列或存根消息的请求。这是一个TCP / IP连接,其中包含以心跳的特定格式发送的数据包。
如果您需要真实的详细信息,可以阅读AMQP 0.9.1 Specification,第4.2.1节和第4.2.7节以及how RabbitMQ corrects for errors in the specification上的勘误表。