yjy别看我的文章 2023-11-10 09:44 采纳率: 64.3%
浏览 6

java分布式事务求解

img


上面这种图是订单服务确认了提交之后在通知积分服务,那么积分服务要是报错了,那么订单服务怎么回滚?那mq又怎么才能保持订单服务和积分服务事务的一一致性呢?

  • 写回答

2条回答 默认 最新

  • Silwings银翼 2023-11-10 10:17
    关注

    从常规业务上说积分失败不应该导致订单失败,而是应该重试,如果是bug等因素导致则需要开发介入.
    如果你硬要回滚,通常有两个方案.
    1.二阶段提交
    订单服务将消息推送到mq成功时,发起一个两阶段提交事务,积分服务收到消息后,也参与到事务中,如果处理成功,提交事务,确认事务完成后向mq发送消息被成功处理的ack,,mq删除消息.如果处理失败,触发事务回滚,不向mq发送ack(我不确定有没有失败的确认接口),mq未收到成功ack的情况下不会删除消息.
    2.补偿
    订单发送完消息后自己提交事务.积分收到消息如果处理失败,像mq发送积分处理失败的消息,订单监听这个消息,根据失败原因等情况进行回滚或其他操作.

    评论

报告相同问题?

问题事件

  • 创建了问题 11月10日

悬赏问题

  • ¥20 access中怎么分割分别获取一下图中的值
  • ¥15 类图中关联与聚合的区别
  • ¥15 ENVI高分五号去除云层的方法
  • ¥15 16进制数据如何得到奇偶校验位
  • ¥15 求合并两个字节流VB6代码
  • ¥15 Pyqt 如何正确的关掉Qthread,并且释放其中的锁?
  • ¥30 网站服务器通过node.js部署了一个项目!前端访问失败
  • ¥15 WPS访问权限不足怎么解决
  • ¥15 java幂等控制问题
  • ¥15 海湾GST-DJ-N500