【问题标题】:JOB_ID NOT FOUND exception Beanstalkd in PHP using pda/pheanstalk in Laravel 4.2JOB_ID NOT FOUND 异常 Beanstalkd 在 PHP 中使用 Laravel 4.2 中的 pda/pheanstalk
【发布时间】:2015-07-28 10:24:23
【问题描述】:

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

调查我注意到以下内容:

如果下一个就绪 Job 的 ID = 74,当我运行 artisan queue:work 时,它会尝试选择 ID 为 73 而不是 74 的下一个就绪 Job,从而导致 JOB_ID not found 异常。

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

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

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

【问题讨论】:

  • 您能否确认您在处理完作业后成功删除了该作业?另外,您正在运行什么版本的 Beanstalkd 和库?

标签: laravel queue beanstalkd


【解决方案1】:

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

因此,worker 为一项工作做一个保留,并一直持有直到它完成工作,或者 beanstalkd 服务器将其取回。

  1. 如果您看到作业 ID 74,并且当您运行它时,您看到它正在获取作业 ID 73,您需要确保没有 urgent jobs,因为这与 ready 状态作业不同。
  2. 工作人员在完成后想要删除作业。但只有在他还持有预备队的情况下才能做到。如果工作人员没有保留保留,则意味着作业被 beanstalkd 服务器收回,或者工作人员本身过早地完成了释放。 TTR 有一个默认 60 秒的时间来解决,之后 Beanstalkd 从您的工作人员那里收回工作,因此无法删除它。这些情况需要位于您的代码中。
  3. 使用出色的管理控制台面板,帮助您查看作业状态并帮助您进行开发https://github.com/ptrofimov/beanstalk_console

【讨论】:

  • 谢谢。我终于弄清楚了这个问题。当工作人员从队列中获取作业时,文件打开代码会抛出异常,杀死整个文件。现在我碰巧集中捕获了系统中的所有异常。所以代码实际上还在继续。现在,当异常发生时,框架似乎将其从队列中删除。因此,当我尝试在运行结束时删除作业时,队列中没有作业这样的作业。
猜你喜欢
  • 2013-04-19
  • 2013-07-31
  • 2016-09-21
  • 2021-01-22
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
相关资源
最近更新 更多