在cmd下运行php使用rabbitmq获取服务器消息消费时,运行几分钟之后如卡死断开链接的状况,
之后再怎么向服务器发送消息,消费者都没有反应,
抓了一次数据包来查看,下图是消费者消费消息的,端口55155:
后来知道零值表示对等方(消费者)建议完全禁用心跳。
代码中默认是0:
后来重新抓了一次包,端口60351,队列里没有消息的时候,
后来看到它在进行心跳包检测:
最后主动断开了和消费者的连接。
rabbitmq在收到来自客户端的connection.tune-ok信令后,启用心跳检测,
rabbitmq会为每个tcp连接创建两个进程用于心跳检测,一个进程定时检测tcp连接上是否有数据发送(这里的发送是指rabbitmq发送数据给客户端),
如果一段时间内没有数据发送给客户端,则发送一个心跳包给客户端,然后循环进行下一次检测;
另一个进程定时检测tcp连接上是否有数据的接收,如果一段时间内没有收到任何数据,则判定为心跳超时,最终会关闭tcp连接。
启动消费者的时候,在rabbitmq后台看到:
最后解决方法:
更多资料:
https://www.rabbitmq.com/heartbeats.html
https://blog.csdn.net/jiao_fuyou/article/details/23186407
https://www.jianshu.com/p/59247da47db4
http://www.nowamagic.net/academy/detail/23350382