分布式事务

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

  

事务保证:

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

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

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

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

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

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

解决远程宕机

posted @ 2021-03-30 10:12  巧克力曲奇  阅读(64)  评论(0编辑  收藏  举报