当前位置:   article > 正文

php rabbitmq 心跳,rabbitmq集群持续出现少量unacked消息

php unacked 怎么应答

问题描述:

rabbitmq队列经常出现unacked消息,且长时间无法重现ready。

在rabbitmq上可以看到多个tcp连接(ESTABLISHED),实际仅一个进程在运行,可能php进程退出后未断开连接,导致消息一直在unacked状态,时间分布上有15分钟重试一次的特征,随机时间后重试消失,初步怀疑和tcp默认配置的超时15分钟有关。

仅rabbitmq集群出现怀疑与集群负载均衡的tcp连接保持配置有关。

解决方案:

1、rabbitmq异常没有处理,php因异常或主动结束进程未主动断开连接,通过负载均衡后会保持此连接。需catch异常主动断开连接

2、几分钟未接受消息,在推送消息后接收消息成功,发送ack失败,程序异常退出,无法主动断开连接。可能负载均衡会对无数据的tcp单向断开,经测试加心跳后可解决。php-amqplib 2.9.0~2.10.0 之间是默认打开heartbeat=60的,后因为服务端兼容问题默认改为关闭了。需主动打开心跳或服务端配置心跳

Heartbeats can be disabled by setting the timeout interval to 0. This is not a recommended practice.

Heartbeat timeouts from 10 to 30 seconds will produce periodic network traffic often enough (roughly every 5 to 15 seconds)) to satisfy defaults of most proxy tools and load balancers. Also see the section on low timeouts and false positives above.

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/391322
推荐阅读
相关标签
  

闽ICP备14008679号