RocketMQ事务消息流程
2021-02-02 13:59:57 0 举报
关于 RocketMQ 处理事务的流程图
作者其他创作
大纲/内容
发送成功
事务消息生产者TransactionMQProducer#sendMessageInTransaction()
放入消息
提交
1.发送准备消息阶段(Producer)
传输消息
根据本地事务执行状态设置结束事务请求头,提交还是回滚消息
存放消息
2.消息处理(Broker)
根据putMessageReusult设置响应信息,包括:消息 id、队列偏移量然后存储到 CommitLog
发送真实消息到 Broker
事务生产者的监听器(根据业务实现)executeLocalTransaction()
RocketMQ事务消息发送解析
发送消息
设置事务消息的真实 Topic、路由、存放的TOPIC
提交/回滚
3.事务消息提交/回滚阶段
事务消息发送使用 2PC第一阶段:发送准备消息第二阶段:消息成功发送后处理TranScationMessageServiceImpl是在 Broker 初始化时实例化的
发送消息前
事务消息使用transactionalMessageBridge 处理相关内容
回滚
DefaultMQProducerImpl#endTransaction()设置结束事务请求头
调用方法DefaultMQProducerImpl#send()
二阶段提交
执行本地事务
Broker在初始化阶段,注册了消息处理器,专门处理同步异步消息,事务消息使用SendMessageProcessor
事务消息回查,是在Borker 启动时单独启动的线程,旨在检查事务消息是否超时
DefaultMessageStore#asyncPutMessage()存放消息
事务消息发送成功后
SendMessageProcessor#asyncSendMessage()判断 transFlag标识(消息发送阶段设置的)
无论事务消息提交还是回滚,都会执行deletePrepareMessage()将消息放到RMQ_SYS_TRANS_OP_HALF_TOPIC主题
1.标记为事务消(TRAN_MSG)2标记为事务消息生产组
根据EndTransactionRequestHeader(结束事务请求头)
处理消息
事务消息服务类传输事务消息TransactionalMessageServiceImpl#asyncPrepareMessage();
设置消息
消息回查阶段
确定回滚还是提交
处理putMessageResult结果
等待 Broker 消息回查
等待Broker 处理
收藏
0 条评论
下一页