JOB_ID 在 PHP 中使用 pda/pheanstalk 在 Laravel 4.2 中未找到 Beanstalkd 异常

JOB_ID NOT FOUND exception Beanstalkd in PHP using pda/pheanstalk in Laravel 4.2

我有一个用 Laravel 4.2 编写的工人排队系统。每当 artisan 试图在队列中获取下一个就绪作业时,我都会收到 JOB_ID not found 异常。

调查时我注意到以下内容:

如果下一个就绪作业的 ID = 74,当我 运行 artisan queue:work 时,它会尝试获取 ID 为 73 而不是 74 的下一个就绪作业,导致 JOB_ID 未发现异常。

我已经多次重启 beantalkd,但问题仍然存在。我也检查了每个作业的 TTR 并将其设置为 3600,但仍然没有成功。

有人遇到过这种情况吗?深入研究 Beanstalk PDA 库,我注意到当 ReleaseCommand class 调用其调度方法时会发生这种情况。

有人经历过吗?什么可能导致这个? 提前致谢。

没有正确的代码,即使有代码也很难定位这样的问题。但是我们过去有过,我可以解释应该如何工作,以及什么时候会抛出异常。

所以 worker 为一个工作做一个保留,并保持直到它开始工作,或者 beanstalkd 服务器收回它。

  1. 如果您看到作业 ID 74,当您 运行 它时,您看到它正在获取作业 ID 73,您需要确保没有 urgent jobs,因为这是不同的来自 ready 个国家职位。
  2. 作业完成后,工作人员想要删除该作业。但只有在他仍然持有储备金的情况下才能做到。如果 worker 没有持有储备,则意味着 beanstalkd 服务器收回了作业,或者 worker 自己过早地完成了发布。 TTR 有一个默认的 60 秒,时间来解决,之后 Beanstalkd 从你的工人那里收回工作,因此不能删除它。这些情况需要在你的代码中定位。
  3. 使用精彩的管理控制台面板,帮助您查看工作状态并帮助您进行开发https://github.com/ptrofimov/beanstalk_console