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

  • 具体配置

消费者数量过多导致假死现象

https://www.cnblogs.com/atwind/p/5606120.html

RabbitMQ之Qos prefetch

https://www.jianshu.com/p/4d043d3045ca

Last updated

Was this helpful?