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 客户端对检测信号设置执行什么操作?它是将存根消息发送到特殊交换/队列还是其他什么?
有人可以详细解释一下吗?
来自 RMQ 检测信号文档:
网络可能以多种方式失败,有时非常微妙(例如高比率数据包丢失(。操作系统需要相当长的时间(例如,Linux 上的默认配置大约需要 11 分钟(才能检测到中断的 TCP 连接。AMQP 0-9-1 提供心跳功能,以确保应用层及时发现中断的连接(以及完全无响应的对等方(。检测信号还可以防御某些可能终止"空闲"TCP 连接的网络设备。
这不是对队列或存根消息的请求。这是一个 TCP/IP 连接,其中的数据包以检测信号的特定格式发送。
如果你想要真正的细节,你可以阅读AMQP 0.9.1规范,第4.2.1和4.2.7节,以及关于RabbitMQ如何纠正规范中的错误的勘误表。
检测信号超时值定义了 RabbitMQ 和客户端库在多长时间后应将 Twitter 连接视为无法访问(关闭(