在春季交易中发送MQ或锁定操作。如果交易尚未结束,则已发送MQ或已发布锁,从而导致数据不一致问题
在上述代码中,保存订单后立即发送MQ,但此时尚未提交交易。如果随后的逻辑需要很长时间,则会有机会。收到消息后,尚未提交生产者的事务。请确保消费者将转到数据库目前检查订单,将找不到它们;
在上面的代码中,尽管最终在使用交易时,在AOP代理之后执行了解锁操作,但它将提前提交给执行,因此仍然存在同时发生的问题。
为了解决上述问题,从本质上讲,允许交易或解锁操作。提交交易后,您可以使用交易方法手动提交直接发布这些操作。但是,优雅。
在这里,我将介绍另一种方法 - 通过扩展春季交易的同步机制来解决此问题:
春季同步机制的具体原理将在此处详细介绍。有关详细信息,请参阅https://blog.csdn.net/f641385712/article/details/915384445本文本文
简而言之,我们可以通过自定义事务同步来自定义交易同步器,然后使用交易方法中的方法在交易完成之前和之后使用交易方法中进行交易同步器;
接口的定义如下:
例如,重写上一个场景的代码1:
我们已经注册了自定义交易同步器,其中:
也就是说,在提交交易后,发送了MQ消息
了解春季交易的同步机制后,我们可以打包此软件包
如何使用:
代码重写
https://github.com/wf2311/spring-tx-post-synchronization
您可以参考该项目的目录以查看特定的测试用例和用法。