RabbitMQ Producer Block
现象描述
生产者服务调用MQ Block,无法生产数据
消费者服务产生大量unacked
图示

Rabbitmq Error Log
可能原因分析:
unacked产生的原因 一般是调制成手动 ack,会出现unacked情况,
每个unacked会占用一个connection;
上图显示占用了 4001个 连接;
rabbitmqctl status查看MQ状况如果rabbitmq connection 连接数占满,新的连接任何请求都会阻塞,拒绝服务。
解决方案
自动ACK
检查代码unack成因;
配置合理的消费者数量;
建议自动ACK,采用
backup & error queue来存储消费过程中遇到问题的数据,不要把MQ变成 long 事务。
手动ACK
MQ 消费者限流:在手动ack情况下,配置 prefetchSize 可以理解为,同时最多unack数量
参数如下:
spring.rabbitmq.listener.simple.prefetch=1
具体配置
消费者数量过多导致假死现象
RabbitMQ之Qos prefetch
Last updated
Was this helpful?