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

shiba · 2021年09月13日 · 最后由 HeroesLiang 回复于 2021年09月22日 · 634 次阅读

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

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

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

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

coderliu 回复

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

coderliu 回复

拿到 ID 不代表已经 commit

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

8 楼 已删除
xeruzo 回复

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

shiba 关闭了讨论。 07月14日 19:30
需要 登录 后方可回复, 如果你还没有账号请 注册新账号