laravel horzion 问题

laravel horzion 问题

laravel horzion 问题

laravel horzion 问题

laravel horzion 问题

laravel horzion 问题

laravel horzion 有一个很奇怪的问题 这两个都是同一个redis实例 但是偶尔有一个就是值不一致 不知道是怎么导致的
有人提过issue github.com/laravel/horizon/issues/...
但是没有去解决这个问题 就是pending_jobs中这个任务完成了 没有移除 但是completed_jobs已经写入了这个job的uuid
我也测试过这个问题 在这个hash里面 如果本来没有这个key值 比如说ccc 在pending的时候没有 但是完成后 就会写入ccc这个key 但是如果ccc已经存在 就感觉没有修改一样 但是$this->connection() 这个去拿的时候是被修改过的 但是用Redis::connection() 去拿的时候就还是原来的值
所以我做了对比 ccc这个key在一开始就存在 completed_at这个值只有在完成的时候存在 就会存在一种情况 ccc没有被修改 但是 completed_at 已经写入进去了 然后pending_jobs 这个有序集合里面应该需要移除这个$payload->id() 成员 但是没有移除掉 就是 上图中的completed这个方法里面的 的 $this->removeJobReference这个方法 这个是移除pending_jobs 中的这个uuid
$this->storeJobReference这个是把uuid存储到这个completed_jobs有序集合里面 这个是写入进去了 这就很奇怪
这种情况是偶然的 就是偶尔会出现一次

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
最佳答案

补充一下

正常执行的时序图:

正常执行的时序图

Bug 场景的时序图:

Bug 场景的时序图

1年前 评论
cccdz (楼主) 1年前
cccdz (楼主) 1年前
讨论数量: 15
leo

是这样的,当 Job 本身执行耗时非常低时会出现,也就是说 pushed 在 completed 之后才被触发。
一个有点恶心的解决方案是在这种 job 执行时先 sleep 几秒钟。

1年前 评论
cccdz (楼主) 1年前
cccdz (楼主) 1年前
leo (作者) 1年前
cccdz (楼主) 1年前
勇敢的心 1年前
cccdz (楼主) 1年前
勇敢的心 1年前
cccdz (楼主) 1年前
勇敢的心 1年前
cccdz (楼主) 1年前

官方怎么就没发现这个问题呢 有好几个人都提了这个问题 但是就直接就关闭了那个issue

1年前 评论
leo

补充一下

正常执行的时序图:

正常执行的时序图

Bug 场景的时序图:

Bug 场景的时序图

1年前 评论
cccdz (楼主) 1年前
cccdz (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!