明确几个事情
前提知识
Q:为什么 rabbitmq server 需要一个心跳机制
A:首先,我们要知道 amqp 是基于 tcp 的,tcp 是有心跳机制的。那么为什么不用 tcp 的心跳来保证『可靠性』呢?答案就是 tcp 的心跳,从 amqp 层面是无法介入的,我们需要一个应用层心跳机制。比如使用 tcp 心跳发现『网络不可达』需要十几分钟,这在一些场景下,太长了,不可接受。
参考:
rabbitmq 消费者为什么需要心跳
生产者需要和 rabbitmq 保持心跳吗?
TCP 连接断开之后,为什么对端需要 10 分钟往上才能知道?
rabbitmq 消费消息的时候如何保持心跳
Q:rabbitmq 的心跳机制使用的是 pull 还是 push 模型?
A:是 push 模型。首先,rabbitmq server 会发一个心跳包到 client。然后 client 收到这个 heartbeat 之后要回复一个 heartbeat 给 rabbitmq server。这样一来一回,一个心跳检查就完成了。
如图所示,192.168.31.245 是 rabbitmq server,192.168.31.103 是 rabbitmq client
使用 kombu 编写相关代码
生产者心跳
使用 nameko 的时候,发现 producer,一般是关闭心跳的。
如果想开启 producer 的 心跳,可以看下面的链接
参考:connection.heartbeat_check does not seem to heartbeat?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。