RabbitMQ心跳机制的工作原理是什么?

17

原生的Java RabbitMQ客户端允许在连接设置中设置心跳,例如:

import com.rabbitmq.client.ConnectionFactory;

...

ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setAutomaticRecoveryEnabled(true);
        connectionFactory.setHost("some://host");
        connectionFactory.setConnectionTimeout(5000);
        connectionFactory.setRequestedHeartbeat(5); // keeps an idle connection alive

rabbitmq客户端如何处理心跳设置?它是发送到特殊的交换机/队列还是还有别的操作?

有人能详细解释一下吗?


1
官方的RabbitMQ文档中有一个关于心跳的部分 - https://www.rabbitmq.com/heartbeats.html - pinepain
2个回答

14

来自RMQ心跳文档

网络可能以多种方式失败,有时非常微妙(例如高比例的数据包丢失)。TCP连接断开需要相当长的时间(例如,在Linux上使用默认配置时,大约需要11分钟),操作系统才能检测到。AMQP 0-9-1提供了一个心跳功能,以确保应用程序层及时发现中断的连接(以及完全无响应的对等方)。心跳还可防止某些可能终止“空闲”TCP连接的网络设备。

这不是对队列或存根消息的请求。 这是通过特定格式发送的TCP/IP连接的数据包进行心跳。

如果您想了解真正的细节,可以阅读AMQP 0.9.1规范第4.2.1和4.2.7节,以及有关RabbitMQ如何纠正规范中的错误的勘误表。


0

心跳超时值定义了RabbitMQ和客户端库在多长时间后应将对等TCP连接视为无法到达(宕机)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接