情景:在生成环境中,两个系统之间数据经常不同步,但是查看日志后发现代码中更新方法实际上是已经更新了的,但是数据库中的数据却没有更新。
解决思路:
1.首先我觉得会不会是因为这个方法有问题导致没有更新数据,导致数据不一致,然后本地调试后发现方法没有问题。
2.没有其他解决方案,那么就多打印一些日志,来判断线上环境是否有问题,那么在生成代码中打印执行前数据,执行结果,以及执行后的数据,发现方法正常运行,而且数据也是正确的,这个时候但是数据还是有不一致的情况出现,同事有出现有些数据没有插入的情况。
3.怀疑是代码执行异常,导致的事务回滚,最终数据没有及时插入和更新,但是我在日志中也没有查询到相关异常错误导致事务回滚,那么我目前是去掉事务注解,然后再打印相关日志,在看看是否有数据不一致的情况出现。
目前为止:不再出现数据不一致的情况,但是由此我想到这里是否可以通过中间件来处理。
方案:
例如将接受到的数据放入中间件中,异步的去一条一条处理,这样确保每一条处理成功以后才把消息置为处理,否则消息就一直在,不过这个也会导致一条数据更新不成功引起之后所有的数据都无法及时更新,但是考虑到,如果订单量大了以后的话,最好还是用中间件,来增加处理效率,以及接口的吞吐量。
网友评论