如何防止队列中的信息丢失?

发布时间 2023-03-22 21:14:18作者: 一蓑烟雨任平生。。

如何防止队列中的信息丢失?

我们先用两个名词来概括往队列中放入消息的行为处理队列中消息的行为,称之为生产者消费者

应用场景:

订单请求过来,为了快速的响应给前端,需要把相关订单信息直接放入消息队列也就是生产者,然后直接响应前端。

关于消息队列的订单信息,我们后端的业务会给予它们处理。(无论是保存到数据库还其他业务等)

但是在处理队列中的信息时难免会有异常,当有了异常,消费者就会重新再操作这个信息,既然这个消息有了异常,我们就需要把他保存下来(让人工处理),可以使用数据库,但是既然mq能保存数据,为啥多此一举呢?

只要在报异常时,把该信息保存到新的队列,这个队列就叫做死信队列

(死信队列的信息都需要人工去处理)

image-20230321202117475

当Rabbitmq配置设置为自动应答且程序有异常,就会一直重试...

RabbitMQ配置

spring.rabbitmq.listener.simple.retry.enabled=true
#重试间隔时间 默认1000ms
spring.rabbitmq.listener.simple.retry.initial-interval = 1000ms
#重试间隔倍数
spring.rabbitmq.listener.simple.retry.multiplier=2
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=10
#最大重试间隔
spring.rabbitmq.template.retry.max-interval=30000

image-20230321211302750

将报错的数据放入死信队列