开发过程中遇到一个问题,事情是这样的,A ,B两个服务,A服务向数据库插入一条记录,并写入一条消息,即当前插入的数据至相应的交换机(先插入数据库后写入到mq)
然后B服务根据这个消息,去数据库查询当前写入的这条记录,结果发现,B服务从数据库中查询不到当前的这条记录;
分析原因: A插入数据的时候,虽然是先插入,后写入消息,但是由于消息消费很快,B在读取到这条消息去数据库查询的时候,A的事务还未提交,导致在B服务去数据库查询的时候,并没有查询到该条数据
解决办法: 让A服务器插入数据库,并提交事务之后,在写入mq的消息,就可以避免此类问题
上解决办法的代码:
//A服务中的数据保存之后,提交事务之后再写消息时候 // 插入数据 faceControlTaskDetailService.saveBatch(faceControlTaskDetailList); // 写入消息 TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { @Override public void afterCommit() { // 写入消息 } });
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)