Laravel beantalk 作业 ID 不匹配

Laravel beanstalk job id not matching

我正在使用 laravel 4.2 开发一个项目,我正在将作业发送到 beantalk 队列。当工作人员选择要执行的作业时,我试图捕获作业的 ID,并在作业失败时将其关联回 failed_jobs table。

问题是从 Pheanstalk_Job->getId() 方法返回的 ID 与 failed_jobs table.

中条目的 ID 不匹配

我认为两者相关可能是冒昧的。如果没有,那么希望有人可以帮助我如何实现捕获与工作相关的 failed_jobs 记录的 ID。

最终,我在导致作业失败的异常与 failed_jobs table 中创建的条目之间创建关联的解决方案涉及以下步骤:

  1. 创建了一个创建异常的迁移 table,其中包括异常字段,即异常消息、代码、文件、行,以及 beantalkd 作业 ID 的字段。
  2. 创建了一个完全按照 laravel 提供的 failed_jobs 模式建模的迁移,并添加了另一个字段,以及 beanstalkd 作业 ID。
  3. 创建了我自己的 QueueServiceProvider 并使用我自己的实现绑定了 'queue.failer''queue.worker' 服务。我的 'failer' 实现扩展了 Illuminate\Queue\Failed\DatabaseFailedJobProvider 并简单地添加了一个方法来执行包含 beanstalkd 作业 ID 的插入。我的 'worker' 实现扩展了 Illuminate\Queue\Worker 并覆盖了 logFailedJob 方法以调用我自己的失败作业插入方法。
  4. app/config/queue.php 中,我添加了 'failed' => ['database' => 'mysql', 'table' => 'exception_failed_jobs'] 告诉 laravel 使用我自己失败的作业 table 调用 'exception_failed_jobs'。
  5. 在我的作业处理程序代码中,fire 方法将我的业务逻辑包装在 try/catch 中,任何引发的异常都会导致异常存储在我的异常 table 中,包括 beanstalkd职位编号。

现在所有引发的异常都通过作业 ID 与失败的作业记录相关联。企业现在可以确定导致作业失败的异常,并决定是纠正潜在问题并重试失败的作业,还是干脆将其从队列中删除。我已经测试了这个解决方案,它完全按照我的需要工作。希望这可以帮助其他有相同需求的人。

迫不及待地将此项目从 4.2 迁移到最新版本。我知道最新的 laravel 已经包含此功能:)