我正在使用 laravel 4.2 开发一个项目,并且我正在将作业发送到 beanstalk 队列。当工作人员选择要执行的作业时,我试图捕获作业的 id,并在作业失败时将其关联回 failed_jobs 表。
问题是从Pheanstalk_Job->getId()
方法返回的 id 永远不会与表中条目的 id 匹配failed_jobs
。
我可能会冒昧地认为这两者是相关的。如果没有,那么希望有人可以帮助我如何捕获与工作相关的 failed_jobs 记录的 id。
我正在使用 laravel 4.2 开发一个项目,并且我正在将作业发送到 beanstalk 队列。当工作人员选择要执行的作业时,我试图捕获作业的 id,并在作业失败时将其关联回 failed_jobs 表。
问题是从Pheanstalk_Job->getId()
方法返回的 id 永远不会与表中条目的 id 匹配failed_jobs
。
我可能会冒昧地认为这两者是相关的。如果没有,那么希望有人可以帮助我如何捕获与工作相关的 failed_jobs 记录的 id。
最终,我在导致作业失败的异常与表中创建的条目之间创建关联的解决方案failed_jobs
涉及以下步骤:
'queue.failer'
服务'queue.worker'
与我自己的实现绑定。我的“失败者”实现扩展了Illuminate\Queue\Failed\DatabaseFailedJobProvider
并简单地添加了一个方法来执行包含 beanstalkd 作业 ID 的插入。我的“工人”实现扩展Illuminate\Queue\Worker
并覆盖了logFailedJob
调用我自己失败的作业插入方法的方法。app/config/queue.php
我包括的内容中,'failed' => ['database' => 'mysql', 'table' => 'exception_failed_jobs']
告诉 laravel 使用我自己的名为“exception_failed_jobs”的失败作业表。现在所有引发的异常都通过作业 ID 与失败的作业记录相关联。企业现在可以确定导致作业失败的异常,并决定是纠正潜在问题并重试失败的作业,还是干脆将其从队列中删除。我已经测试了这个解决方案,它完全按照我的需要工作。希望这可以帮助其他有相同要求的人。
迫不及待地将这个项目从 4.2 迁移到最新版本。我知道最新的 laravel 已经有了这个功能:)