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还是做其他什么?
有人能详细解释一下吗?
2条答案
按热度按时间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上的勘误表。
06odsfpq2#
心跳超时值定义了RabbitMQ和客户端库认为对等TCP连接不可达(关闭)的时间段