php rabbitmq 心跳,rabbitmq集群持续出现少量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==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值