RabbitMQ消息积压、消息重试
消息积压
可能产生消息积压的情况:
- 消费端宕机
- 消费端消费能力不足
- 生产端发送流量过大
预防措施
生产者
- 给消息设置TTL,超时就丢弃
- 考虑使用队列最大长度限制
- 减少发布频率
消费者
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过期时间与死信队列说明