一次关于事务问题引起的奇奇怪怪的问题

40 阅读1分钟

有一个需求如下:

4a81eb34-a504-46bf-a04e-e59c905587fa.png 当保存人员信息的时候,会给第三方推送人员信息,第三方再保存,实施说当重复调用的时候才会保存成功,第一次调用的时候不会保存成功。 我就先去找接口日志,找日志发现确实是调用了三方接口, 但是为啥要重复调用两次呢???我们每次都推送了最新数据。

a36c1feb-c281-44b1-9d0d-025f4f5c3f0d.png 这时候我发现这个方法上面有个事务,我就怀疑是不是第三方的问题, 然后后续发现是第三方根本就不管我们传的啥数据???直接通过dblink 连到我们数据库去取了,而那个调用又是一个同步调用接口,我们会等待第三方返回了再执行后续逻辑,而那个事务在返回的时候是并没有提交的,所以每次第三方都会取到我们事务开始之前的数据。

21104184-9c9e-4298-a7ff-cc1627a802b6.png

后续解决方案如下: 把调用第三方的逻辑改到事务提交之后,或者联系三方让他们直接取我们传过去的数据

09fcfd72-89da-417e-b0fc-8f950b087534.png