我使用 Laravel 的 Supervisor 进行队列管理,并使用默认命令 ( php artisan queue:failed-table+ migrate) 添加了 failed_jobs 表。
作业有时会失败,但 failed_jobs 表永远不会被填充,因为它显然试图添加没有主键的记录。我不知道 Laravel 中的哪里可以让它生成 uuid。
我发现类似的问题Duplicate entry '014c3080-3ee3-4198-946c-dfe1d8d858a7' for key 'failed_jobs_uuid_unique',但有不同的原因。我的应用程序甚至不生成 uuid。
小智 7
看起来 Laravel 正在尝试使用相同的 UUID 多次记录相同的失败作业。当两个工作人员选择相同的工作并且两次执行都失败时,可能会发生这种情况。第一个工作程序将能够成功记录作业,但第二个工作程序将收到此错误,因为具有相同 UUID 的条目已存在。
检查此链接以防止此问题
https://divinglaravel.com/prevent-your-queued-jobs-from-duplicating
作业的 uuid 是通过名为“ database-uuids ”的驱动程序生成的。默认情况下,应在config/queue.php中配置如下(靠近文件末尾):
'failed' => [
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
Run Code Online (Sandbox Code Playgroud)
除非您在 .env 文件中为QUEUE_FAILED_DRIVER提供了另一个值,否则默认情况下应为 failed_jobs 指定一个 uuid。
如果这不起作用,请对此答案发表评论,我将尝试寻找其他解决方案。
| 归档时间: |
|
| 查看次数: |
3571 次 |
| 最近记录: |