如题:在1调用当前子系统时,可以用spring的transactional注解来实现,但
当我使用chix报文调用其它子系统实现对数据的注销,领取以及复核时,事务
并没有起到作用,那么我如何实现在领取数据有异常的情况下,注销数据实现
回滚
transactional只对运行时异常进行回,你可以设置指定异常的检查型异常也进行回滚或者直接对所有检查型异常进行回滚@Transaction(RollbackFor=Exception.class)
这个应该没办法用spring,建议在chix报文中找有没有可以回滚的方法
这个问题呢,属于分布式事物问题。解决问题很多,我可以简单列举一下:
1.两阶段提交,在你请求下游系统时,同步做到事物在多个系统间的协作,Spring Boot中有相应的支持,但是并不建议使用
2.Event-Driven,放弃即时的一致性,而拥抱最终一致性,在您人为需要回滚时,发送Event到消息队列,然后再需要事物回滚
的应用中监听,当收到事件,根据事件的ID以及其他属性,回滚响应的数据(其实这里已经不能称为回滚了)
3.Saga,这种方式也是最终一致性的解决方案,针对的是长流程,通过一个Saga管理者,协调对多个服务、多个调用的异步协作,
该方案是对Event-Driven的复杂化,故业务不复杂的情况下不建议用。
4.同步方式,也是最简单的方式,当调用下游报异常时,那么基于@Transaction(RollbackFor=Exception.class),撤销掉当前的
事物即可。