zoukankan      html  css  js  c++  java
  • 分布式事务

    订单服务下订单---------
    库存服务锁库存---------->分布式事务
    用户服务扣减积分-------/
    

      

    事务保证:

    1、订单服务异常,库存锁定不运行,全部回滚,撤销操作
    2、库存服务事务自治,锁定失败全部回滚,订单感受到,继续回滚
    3、库存服务锁定成功了,但是网络原因返回数据途中问题?
    4、库存服务锁定成功了,库存服务下面的逻辑发生故障,订单回滚了,怎么处理?

    利用消息队列实现最终一致

    库存服务锁定成功后发给消息队列消息(当前库存工作单),过段时间自动解锁,解锁时先查询订单的支付状态。解锁成功修改库存工作单详情项状态为已解锁

    1、远程服务假失败:远程服务其实成功了,由于网络故障等没有返回导致:订单回滚,库存却扣减
    2、远程服务执行完成,下面的其他方法出现问题导致:已执行的远程请求,肯定不能回滚
    事务传播问题中,传播后事务设置还是原来的,如果不想用原来设置,必须new事务

    注意同类中调用的话,被调用事务会失效,原因在于aop。事务基于代理,同对象的方法动态代理都是同一个。解决方案是使用代理对象调用。引用aop-starter后,使用aspectJ,开启AspectJ动态代理,原来默认使用的是jdk动态代理。

    使用@EnableAspectJAutoProxy(exposeProxy=true)后,就取代了jdk动态代理。它没有接口也可以创建动态代理。设置true是为了对外暴露代理对象。
    AopContext.currentProxy()然后强转就是当前代理对象。

    解决远程宕机

  • 相关阅读:
    pytesser模块WindowsError错误解决方法
    Django 1.10中文文档-聚合
    Django 1.10中文文档-执行查询
    Python NLP入门教程
    Django1.10中文文档—模型
    曲线点抽稀算法-Python实现
    Python判断文件是否存在的三种方法
    epoll原理
    多线程编程
    后端知识地图
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14595576.html
Copyright © 2011-2022 走看看