java踩坑日常——事物内末尾发送MQ消息

今天发现订单状态推进有问题,大概百分之二的出错率。一路追查到数据库sql执行记录。才发现了问题。

订单更新逻辑如下:

1、更新订单

2、发送此订单的MQ消息

3、消费者读取此订单数据,生成(同步)履约单

4、更新此订单的履约同步状态

问题出在第四步,没有选择单字段更新,用mybatis的生成器生成mapper和接口后,更新时直接使用了3中读取的数据。

正常来讲,这样其实也没有问题,毕竟按照顺序执行的话,3读取的是1更新后的数据。

然后。事物实际在2之后彩扩提交生效修改数据库,就有可能出现2->3->1的执行顺序,此时1的更新失效。订单状态出错。

 

posted @ 2019-07-04 19:26  豆豆323  阅读(267)  评论(0编辑  收藏  举报