rabbitmq心跳是如何工作的?

rta7y2nd  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(260)

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客户端对heartbeat设置做了什么?它是发送一个stubbed消息到特殊的exchange/queue还是做其他什么?
有人能详细解释一下吗?

sf6xfgos

sf6xfgos1#

RMQ Heartbeat documentation
网络故障有多种表现形式,有时非常微妙(例如,高比率的数据包丢失)。中断的TCP连接需要相当长的时间(在Linux上使用默认配置大约需要11分钟,AMQP 0-9-1提供了心跳特征以确保应用层迅速发现中断的连接(以及完全无响应的对等体)。心跳还可防止某些可能终止“空闲”TCP连接的网络设备。
这不是对队列或存根消息的请求。这是一个TCP/IP连接,数据包以心跳的特定格式发送。
如果您想了解真正的详细信息,也可以阅读AMQP 0.9.1 Specification的4.2.1和4.2.7节以及how RabbitMQ corrects for errors in the specification上的勘误表。

06odsfpq

06odsfpq2#

心跳超时值定义了RabbitMQ和客户端库认为对等TCP连接不可达(关闭)的时间段

相关问题