半消息是什么?RocketMQ 是怎么实现分布式事务消息的?

参考答案

半消息

是指暂时还不能被 Consumer 消费的消息,Producer 成功发送到 Broker 端的消息,但是此消息被标记为“暂不可投递”状态,只有等 Producer 端执行完本地事务,经过二次确认了之后,Consumer 才能消费此条消息。

分布式事务消息的实现过程

依赖半消息,二次确认以及消息回查机制。

半消息是什么?RocketMQ 是怎么实现分布式事务消息的?

  1. Producer 向 Broker 发送半消息
  2. Producer 端收到响应,消息发送成功,此时消息是半消息,标记为“不可投递”状态,Consumer 消费不了。
  3. Producer 端执行本地事务。
  4. 正常情况本地事务执行完成,Producer 向 Broker 发送 Commit/Rollback ,如果是Commit,Broker 端将半消息标记为正常消息,Consumer 可以消费,如果是 Rollback ,Broker 将丢弃此消息。
  5. 异常情况,Broker 端迟迟等不到二次确认。在一定时间后,会查询所有的半消息,然后到Producer 端查询半消息的执行情况。
  6. Producer 端查询本地事务的状态
  7. 根据事务的状态,提交 commit/rollback 到 Broker 端。

PS.  上述 5、6、7 是消息回查。

 

以上,是消息队列 RocketMQ 面试题【半消息是什么?RocketMQ 是怎么实现分布式事务消息的?】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧