💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
通过将一系列同步的事务操作变为基于消息执行的异步操作, 避免了分布式事务中的同步阻塞操作的影响 这个方案真正实现了两个服务的解耦, 解耦的关键就是异步消息和补偿性事务. 这里以一个例子作为讲解 ![](https://box.kancloud.cn/b5ba5fa1e07f80c53a7aad80f634cbe5_1638x502.png) 执行步骤如下: 1. MQ发送方发送远程事务消息到MQ Server; 2. MQ Server给予响应, 表明事务消息已成功到达MQ Server. 3. MQ发送方Commit本地事务. 4. 若本地事务Commit成功, 则通知MQ Server允许对应事务消息被消费; 若本地事务失败, 则通知MQ Server对应事务消息应被丢弃. 5. 若MQ发送方超时未对MQ Server作出本地事务执行状态的反馈, 那么需要MQ Servfer向MQ发送方主动回查事务状态, 以决定事务消息是否能被消费. 6. 当得知本地事务执行成功时, MQ Server允许MQ订阅方消费本条事务消息 需要额外说明的一点, 就是事务消息投递到MQ订阅方后, 并不一定能够成功执行. 需要MQ订阅方主动给予消费反馈(ack) * 如果MQ订阅方执行远程事务成功, 则给予消费成功的ack, 那么MQ Server可以安全将事务消息移除; * 如果执行失败, MQ Server需要对消息重新投递, 直至消费成功. # 注意事项 * 消息中间件在系统中扮演一个重要的角色, 所有的事务消息都需要通过它来传达, 所以消息中间件也需要支持 HAC 来确保事务消息不丢失. * 根据业务逻辑的具体实现不同,还可能需要对消息中间件增加消息不重复, 不乱序等其它要求. # 适用场景 * 执行周期较长 * 实时性要求不高 例如: * 跨行转账/汇款业务(两个服务分别在不同的银行中) * 退货/退款业务 * 财务, 账单统计业务(先发送到消息中间件, 然后进行批量记账)