PHP 解决RabbitMQ消费者自动掉线问题

PHP 解决RabbitMQ消费者自动掉线问题_第1张图片

 在cmd下运行php使用rabbitmq获取服务器消息消费时,运行几分钟之后如卡死断开链接的状况,

之后再怎么向服务器发送消息,消费者都没有反应,

抓了一次数据包来查看,下图是消费者消费消息的,端口55155:

PHP 解决RabbitMQ消费者自动掉线问题_第2张图片

PHP 解决RabbitMQ消费者自动掉线问题_第3张图片

后来知道零值表示对等​​方(消费者)建议完全禁用心跳。

代码中默认是0:

PHP 解决RabbitMQ消费者自动掉线问题_第4张图片

 

后来重新抓了一次包,端口60351,队列里没有消息的时候,

PHP 解决RabbitMQ消费者自动掉线问题_第5张图片

后来看到它在进行心跳包检测:

PHP 解决RabbitMQ消费者自动掉线问题_第6张图片

最后主动断开了和消费者的连接。

rabbitmq在收到来自客户端的connection.tune-ok信令后,启用心跳检测,

rabbitmq会为每个tcp连接创建两个进程用于心跳检测,一个进程定时检测tcp连接上是否有数据发送(这里的发送是指rabbitmq发送数据给客户端),

如果一段时间内没有数据发送给客户端,则发送一个心跳包给客户端,然后循环进行下一次检测;

另一个进程定时检测tcp连接上是否有数据的接收,如果一段时间内没有收到任何数据,则判定为心跳超时,最终会关闭tcp连接。

 

启动消费者的时候,在rabbitmq后台看到:

PHP 解决RabbitMQ消费者自动掉线问题_第7张图片

最后解决方法:

PHP 解决RabbitMQ消费者自动掉线问题_第8张图片

PHP 解决RabbitMQ消费者自动掉线问题_第9张图片

更多资料:

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

 

 

你可能感兴趣的:(PHP,RabbitMQ)