rabbitmq心跳是如何工作的

Ole*_*ski 12 heartbeat rabbitmq

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
Run Code Online (Sandbox Code Playgroud)

Rabbitmq客户端使用心跳设置做什么?它是否向特殊交换/队列发送存根消息或者其他什么?

有人可以详细解释一下吗?

Der*_*ley 10

来自RMQ Heartbeat文档:

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

这不是对队列或存根消息的请求.这是一个TCP/IP连接,其中包含以心跳的特定格式发送的数据包.

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