RabbitMQ消息积压、消息重试

消息积压

可能产生消息积压的情况:

  • 消费端宕机
  • 消费端消费能力不足
  • 生产端发送流量过大

预防措施

生产者

  1. 给消息设置TTL,超时就丢弃
  2. 考虑使用队列最大长度限制
  3. 减少发布频率

消费者

1、增加消费实例,提升消费效率

2、增加消费的多线程处理

 #配置完成后重启后可以通过rabbitmq页面查看到

3、紧急处理的话,可以紧急上线专门用于记录消息的队列,先把MQ中的消息记录到数据库中,然后再慢慢的消化处理。

消息重试

消费者消费消息的时候,发生异常情况,导致消息未确认,该消息会被重复消费(默认没有重复次数,即无限循环消费),RabbitMQ一直在重试状态,消息就会一直没有被消费掉,就有可能在线上导致消息积压的情况。

所以可以对其设置最大的重试次数

server:
  port: 8082

spring:
  application:
    name: rabbitmq-consumer
  rabbitmq:
    host: 192.168.111.129
    port: 5672
    username: admin
    password: 123
    virtual-host: /

    listener:
      simple:
        retry:
          enabled: true           #开启消费者重试
          max-attempts: 5         #最大重试次数
          initial-interval: 5000  #重试间隔时间(单位毫秒)
          max-interval: 1200000   #重试最大时间间隔(单位毫秒)
          multiplier: 5           #应用于前一重试间隔的乘法器。

但是当消费者达到我们所设置重试次数,消息还未被成功接收的话,默认我们队列就会将该消息进行丢弃,所以一般后期需要进行配置死信队列结合使用,死信队列的设置可参考RabbitMQ TTL过期时间与死信队列说明

 

posted @ 2022-04-22 17:56  RFAA  阅读(955)  评论(0编辑  收藏  举报