首页 > 其他 > 详细

Rabbitmq防止消息的丢失

时间:2021-05-30 20:00:13      阅读:20      评论:0      收藏:0      [点我收藏+]

一、Rabbitmq的流程图

技术分享图片

二、出现消息丢失的三个可能

  A:写消息的过程,消息都没到rabbitmq,在网络传输过程就丢了;或者是消息到了rabbitmq,但是人家内部出错了没保存下来
    
     例子:
          1、channel.confirm  // 先把channel设置成confirm的模式
          2、发一个消息
          3、生产者实现ConfirmListener接口handleAck()和handleNack()方法
            /**
             ** handleAck RabbitMQ消息接收成功的方法,成功后业务可以做的事情
             ** 发送端投递消息前,需要把消息先存起来,比如用KV存储,接收到ack后删除
           **/
          void handleAck(long deliveryTag, boolean multiple)
              throws IOException;

          //handleNack RabbitMQ消息接收失败的通知方法,用户可以在这里重新投递消息
          void handleNack(long deliveryTag, boolean multiple)
              throws IOException;



  B:Rabbitmq接收到消息之后先暂存在自己的内存里,结果消费者还没来得及消费,rabbitmq自己挂掉了就导致暂存在内存里得数据就就搞丢
    
       持久化queue,exchange均设置为 durable=True
     
       持久化消息message:delivery_mode = 2  

  C:消费者消费到了这个消息,但是还没来得及处理自己就挂掉了,但是rabbitmq以为这个消息者已经处理完了

      解决方案:使用手动ACK

三、解释图

技术分享图片

Rabbitmq防止消息的丢失

原文:https://www.cnblogs.com/jock766/p/14828743.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!