Rails 使用 MySQL 持久化数据时没有同步的问题

shiba · September 13, 2021 · Last by HeroesLiang replied at September 22, 2021 · 621 hits

当前业务流程是在进入 mq 队列之前持久化一个模型数据,传入 id 后在 work 中进行查询然后进一步处理,现在的情况是 create 后进入 work 中根据 id 查询不到相应的数据,出现频率大概为 3/10,导致后续流程无法跑通,因为内部约定不能使用 sleep,一直 while 进行循环获取又有点傻,请问还有其他办法吗。

这应该要确保数据库保存后才入队。入队之前数据库事务 commit 了没?

大概率就是 2 楼说的原因了,你没 commit 就提交了异步任务,然后 save 的时候校验没过回滚了,自然执行异步用 id 找不到数据

能拿到 ID 应该是持久化成功了,save 时的 validation 应该是通过了,感觉 replica 同步延迟的可能性大一些

Reply to coderliu

要异步的对象 save 成功
但是业务流后面的逻辑或者其他校验失败了导致事务回滚

Reply to coderliu

拿到 ID 不代表已经 commit

排查下 job 是不是放到事务中了

8 Floor has deleted
Reply to xeruzo

不一定是校验没过导致回滚了,很大可能是还没持久化,就根据 id 查数据

shiba closed this topic. 14 Jul 19:30
You need to Sign in before reply, if you don't have an account, please Sign up first.