RabbitMQ消息丢失

  • 生产者消息丢失场景:

    • -生产者消息丢失,写消息的过程中,消息没到rabbitmq在网络传输过程中就丢失;或者是消息到了rabbitmq,但是mq内部出错,目前没有保存消息.
  • 生产者消息丢失解决方案:

    • 1.通过事务机制
    Connection conn = factory.newConnection();
    Channel channel = conn.createChannel();
    channel.txSelect;
    try{
      //发送消息
    }catch(Exception e){
      channel.txRollback;
      //再次尝试发送该条消息
    }
    channel.txCommit;
    channel.close();
    conn.close();
    //缺点,是同步操作,生产者发送消息会同步阻塞,等待成功失败,导致吞吐量下降
    
    • 2.使用confirm模式(异步确认方式);1.把channel设置为confirm模式;2.发送消息;3.发送消息之后无需任何操作;4.rabbitmq接受到消息就回调本地的接口,通知信息收到;5.如果rabbitmq信息接受失败也会回调本地的一个接口,通知消息接收失败,此时你可以选择再次发送该条消息.
  • RabbitMQ消息丢失场景:

    • -rabbitmq接受到消息,缓存到内存中,还没被消费,此时rabbitmq挂了,存到内存中的数据丢失.
  • RabbitMQ消息丢失解决方案:

    • -第一步:设置创建queue设置为持久化(只会持久化queue元数据,但不会持久化queue中的数据);
    • 第二部:发送消息时,设置deliveryMode设置为2(此时queue中的数据也将被持久化);
    • 第三步:配合confirm机制使用,当消息被持久化后才通知生产者ack;
  • 消费者丢失数据场景:

    • -消费者接收到消息,但是还没操作,消费者自己挂了,但是rabbitmq以为该条消息已经被消费.
  • 消费者丢失数据解决方案:

    • -将autoAck关闭,在处理完消息后再手动提交ack;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容