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 中创建的条目之间创建关联的解决方案涉及以下步骤:
- 创建了一个创建异常的迁移 table,其中包括异常字段,即异常消息、代码、文件、行,以及 beantalkd 作业 ID 的字段。
- 创建了一个完全按照 laravel 提供的 failed_jobs 模式建模的迁移,并添加了另一个字段,以及 beanstalkd 作业 ID。
- 创建了我自己的 QueueServiceProvider 并使用我自己的实现绑定了
'queue.failer'
和 'queue.worker'
服务。我的 'failer' 实现扩展了 Illuminate\Queue\Failed\DatabaseFailedJobProvider
并简单地添加了一个方法来执行包含 beanstalkd 作业 ID 的插入。我的 'worker' 实现扩展了 Illuminate\Queue\Worker
并覆盖了 logFailedJob
方法以调用我自己的失败作业插入方法。
- 在
app/config/queue.php
中,我添加了 'failed' => ['database' => 'mysql', 'table' => 'exception_failed_jobs']
告诉 laravel 使用我自己失败的作业 table 调用 'exception_failed_jobs'。
- 在我的作业处理程序代码中,fire 方法将我的业务逻辑包装在 try/catch 中,任何引发的异常都会导致异常存储在我的异常 table 中,包括 beanstalkd职位编号。
现在所有引发的异常都通过作业 ID 与失败的作业记录相关联。企业现在可以确定导致作业失败的异常,并决定是纠正潜在问题并重试失败的作业,还是干脆将其从队列中删除。我已经测试了这个解决方案,它完全按照我的需要工作。希望这可以帮助其他有相同需求的人。
迫不及待地将此项目从 4.2 迁移到最新版本。我知道最新的 laravel 已经包含此功能:)
我正在使用 laravel 4.2 开发一个项目,我正在将作业发送到 beantalk 队列。当工作人员选择要执行的作业时,我试图捕获作业的 ID,并在作业失败时将其关联回 failed_jobs table。
问题是从 Pheanstalk_Job->getId()
方法返回的 ID 与 failed_jobs
table.
我认为两者相关可能是冒昧的。如果没有,那么希望有人可以帮助我如何实现捕获与工作相关的 failed_jobs 记录的 ID。
最终,我在导致作业失败的异常与 failed_jobs
table 中创建的条目之间创建关联的解决方案涉及以下步骤:
- 创建了一个创建异常的迁移 table,其中包括异常字段,即异常消息、代码、文件、行,以及 beantalkd 作业 ID 的字段。
- 创建了一个完全按照 laravel 提供的 failed_jobs 模式建模的迁移,并添加了另一个字段,以及 beanstalkd 作业 ID。
- 创建了我自己的 QueueServiceProvider 并使用我自己的实现绑定了
'queue.failer'
和'queue.worker'
服务。我的 'failer' 实现扩展了Illuminate\Queue\Failed\DatabaseFailedJobProvider
并简单地添加了一个方法来执行包含 beanstalkd 作业 ID 的插入。我的 'worker' 实现扩展了Illuminate\Queue\Worker
并覆盖了logFailedJob
方法以调用我自己的失败作业插入方法。 - 在
app/config/queue.php
中,我添加了'failed' => ['database' => 'mysql', 'table' => 'exception_failed_jobs']
告诉 laravel 使用我自己失败的作业 table 调用 'exception_failed_jobs'。 - 在我的作业处理程序代码中,fire 方法将我的业务逻辑包装在 try/catch 中,任何引发的异常都会导致异常存储在我的异常 table 中,包括 beanstalkd职位编号。
现在所有引发的异常都通过作业 ID 与失败的作业记录相关联。企业现在可以确定导致作业失败的异常,并决定是纠正潜在问题并重试失败的作业,还是干脆将其从队列中删除。我已经测试了这个解决方案,它完全按照我的需要工作。希望这可以帮助其他有相同需求的人。
迫不及待地将此项目从 4.2 迁移到最新版本。我知道最新的 laravel 已经包含此功能:)