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 @   狒狒桑  阅读(305)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示