业务场景:新增一条记录(insert好几张表)生效时,发kafka消息(多处新增需要兼容)
service方法如下:
@Transactional(rollbackFor = Exception.class)
public void saveXXX(/** 忽略参数 **/){
//...省略保存数据库逻辑...//
//sendMessage 根据主表的id去查询各个表,组装消息
CompletableFuture.runAsync(() -> sendMessage(Integer id));
}
sendMessage会出现找不到id的情况
可能是数据库主从延迟导致的?解决方法:让sendMessage方法强制查询主库
还是有一部分出现找不到id的情况。
可能有saveXXX的事务还没提交,sendMessage就异步执行了。解决办法:sendMessage方法入参修改为拼装好的insert实体类作为消息的源数据,不再查库