# rocketmq **Repository Path**: su27sk/rocketmq ## Basic Information - **Project Name**: rocketmq - **Description**: 使用RocketMQ完成分布式事务 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-09 - **Last Updated**: 2026-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1. 前端调用退款接口,组装消息,调用`sendMessageInTransaction` 2. 生产者先发送**半消息**给 Broker,消息暂时不可见 3. Broker 同步回调`executeLocalTransaction`执行本地事务: - 本地事务正常:更新订单,事务提交,返回 COMMIT → Broker 投递消息给消费者 - 本地事务异常:数据库回滚,catch 异常返回 ROLLBACK → Broker 删除半消息 4. 本地事务执行完毕,正常返回结果,接口返回退款成功 / 失败给前端 5. **兜底回查场景**:如果 Broker 没有收到生产者的最终应答(服务宕机、网络丢包),Broker 会定时调用`checkLocalTransaction`,查询数据库订单真实状态,决定提交还是丢弃消息。 ## 关键要点标注 - `refund`外层**没有 @Transactional**;`changeRefundStatus`单独带 @Transactional - 回查只会查询 DB,**不能做修改操作**,天然幂等 - 回查触发条件:Broker 收不到本地事务最终确认,不是网络差才触发 - orderNo 放在`msg.header`,回查时可以获取;arg 参数回查阶段无法拿到 如果你需要,我可以导出纯文本版流程图,或者改成适合 PPT 的版本。