我们系统需要调一个三方下单系统接口。 假设我们系统是A,三方系统是B。 交互流程是: 1,我们系统生成一条订单入库 2,调用B系统下单,将B系统返回的订单id和第一步的A系统的数据关联。 3,B系统以后订单有修改通知会调我们一个接口通知,他们会给我们订单id,根据订单id去第一步的表中查询然后更改状态。
遇到的问题:由于本地数据库事务问题,1-2是放一个事务的,当调用B后,由于本地事务没提交,但是B的通知回调(也就是3)已经来了,根据订单id查不到数据。
错误解决方案: 第一种:我现在只是把(1)放一个独立事务,直接先保存事务。把(2)也是独立事务,可是由于给订单赋值三方系统订单id也是在调用完接口才能赋值,依旧也没法解决最初的问题。
第二种:考虑过把三方回调放消息队列延时执行,可是他们需要3s内正确的返回。所以我想先接收他们回调,然后立即放入mq,同时给他们返回成功。但是又遇到一个问题,就是一个订单会有多个通知消息,这些消息又是必须要顺序执行。比如一个订单id为100的订单,来了三个消息A B C,当处理消息A时,恰巧订单事务没提交,导致没查询到订单,那就把这条消息重新投递。紧接着处理B消息,可是这时已经破坏消息消费的顺序了,所以又走不下去了。 请求各位朋友帮忙指点小弟一把,感恩!