参考答案
半消息
是指暂时还不能被 Consumer 消费的消息,Producer 成功发送到 Broker 端的消息,但是此消息被标记为“暂不可投递”状态,只有等 Producer 端执行完本地事务,经过二次确认了之后,Consumer 才能消费此条消息。
分布式事务消息的实现过程
依赖半消息,二次确认以及消息回查机制。
- Producer 向 Broker 发送半消息
- Producer 端收到响应,消息发送成功,此时消息是半消息,标记为“不可投递”状态,Consumer 消费不了。
- Producer 端执行本地事务。
- 正常情况本地事务执行完成,Producer 向 Broker 发送 Commit/Rollback ,如果是Commit,Broker 端将半消息标记为正常消息,Consumer 可以消费,如果是 Rollback ,Broker 将丢弃此消息。
- 异常情况,Broker 端迟迟等不到二次确认。在一定时间后,会查询所有的半消息,然后到Producer 端查询半消息的执行情况。
- Producer 端查询本地事务的状态
- 根据事务的状态,提交 commit/rollback 到 Broker 端。
PS. 上述 5、6、7 是消息回查。
以上,是消息队列 RocketMQ 面试题【半消息是什么?RocketMQ 是怎么实现分布式事务消息的?】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—