rabbitmq消息丢失问题

1. 丢失消息场景

(1)生产者写消息网络丢失

(2)rabbitmq收到消息,mq故障

(3)消费者收到消息后,消费者故障

 

 

2. 对应处理方案

(1)生产者弄丢了数据

       <1> 基于事务,rabbitmq报错,则回滚重发

   问题:事务机制,是同步的,会卡主等待消息发送成功,会导致生产者发送消息的吞吐量下降

       <2> confirm模式,生产者发送一个消息,就不用管了

          rabbitmq收到消息后,会回调生产者本地接口,通知收到

       rabbitmq收到消息波按错会回调生产者本地接口,通知接受失败,可以重发

    优点:可以直接发下一条消息,非阻塞 异步,吞吐量高

(2)rabbitmq弄丢数据

   让rabbitmq把消息持久化到磁盘(持久化元数据 + 持久化数据)

   但会出现rabbitmq收到消息还未持久化到磁盘,rabbitmq挂了,仍然会丢失数据,但可能性已下降很多

(3)消费者弄丢数据

  消费者拿到数据后,会通知rabbitmq数据已接收,但还没处理此时消费者宕机,会出现消息丢了 (rabbitmq以为已经处理完成)

  解决方案:消费者端,关闭autoAck,在确实处理完数据后,再向rabbitmq发送ack

 

 

posted @ 2022-04-10 18:14  狒狒桑  阅读(321)  评论(0)    收藏  举报