当前位置:   article > 正文

消息队列如何保证消息不丢失

消息队列如何保证消息不丢失

这里我们以RocketMQ为例子,其他消息队列的原理基本上差不多。

首先确定在消息的传输过程中,会在三个阶段出现丢失数据的情况:

  1. 生产者没有成功发送消息
  2. RocketMQ没有成功持久化消息
  3. 消费者没有成功消费消息

在这里插入图片描述

对应的解决办法也非常地简单,和TCP的三次握手很类似:

  1. 事务机制/confirm机制:
    生产者开启事务,只有当RocketMQ成功收到消息了,生产者才关闭事务,但是这个方法会阻塞;confirm机制相对有优势,它属于异步操作,当生产者发送完消息后,不需要一直等待,RocketMQ接收后会通知到生产者。
  2. 开启持久化: RocketMQ开启持久化,只有在RocketMQ成功持久化之后,才会发送confirm的消息给生产者
  3. 关闭RocketMQ的自动ack, 消费者只有消费完毕后才给RocketMQ发送确认消息
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/826315
推荐阅读
相关标签
  

闽ICP备14008679号