CAICAIIs commented on issue #765: URL: https://github.com/apache/incubator-seata-go/issues/765#issuecomment-3980707668
### 问题 Java 端的 SeataMQProducer 在 Commit/Rollback 阶段直接调用 producer.endTransaction(sendResult, COMMIT/ROLLBACK),但 Go 客户端(apache/rocketmq-client-go/v2)的 endTransaction() 是私有方法,无法从外部调用。 ### 方案 既然无法调用客户端的私有方法,我们直接构造 RocketMQ Remoting 协议的 END_TRANSACTION 请求,通过 TCP 发送给 Broker。效果和 Java 端调用 endTransaction() 一样,Commit/Rollback 立即生效。 实现上采用渐进式策略: 1. 先实现纯回查模式作为保底(Commit/Rollback 不做操作,依赖 Broker 60s 后回查) 2. 再实现协议层,优先使用,失败自动降级 ### 实施计划 PR1:基础框架 - Prepare 发送 Half-Message,返回 UnknownState - Commit/Rollback 不做操作,依赖 Broker 回查 - CheckLocalTransaction 查询 TC 全局状态 - 功能完整,Commit 延迟约 60s PR-2:协议适配 - 实现 END_TRANSACTION 请求(RequestCode=37) - Commit/Rollback 优先走协议,失败降级到回查 - Commit 延迟降低到毫秒级 PR-3:集成测试 + 文档 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
