laravel 12 中查看失败任务执行 php artisan queue:failed,支持分页筛选;重试用 queue:retry 命令,可指定 id、队列或全部;需启用 database-uuids 等持久化驱动并完成迁移。

在 Laravel 12 中,队列失败任务的查看与重试机制延续了前序版本的成熟设计,并针对多模态队列(如 AI 任务、实时流等)增强了可观测性。核心操作仍围绕 Artisan 命令和配置驱动展开,但需注意新版本对 database-uuids 驱动的默认强化及 Horizon 的深度集成。
查看失败任务列表
执行以下命令即可列出所有已记录的失败任务:
-
php artisan queue:failed—— 默认显示 ID、连接、队列、类名、失败时间、异常消息摘要 - 支持分页与筛选:
php artisan queue:failed --limit=20 --queue=emails - 若使用 Horizon,可在 Web 界面
/horizon/failed直观查看带堆栈追踪、重试按钮和元数据(如任务标签、通道)的失败详情
重试单个或批量失败任务
重试操作直接将任务从失败存储中取出,反序列化后重新推入对应队列:
-
php artisan queue:retry 123—— 重试 ID 为 123 的任务(会按原队列、通道、延迟设置恢复) -
php artisan queue:retry all—— 重试所有失败任务 -
php artisan queue:retry --queue=ai-queue—— 仅重试指定队列(如专用于 AI 推理的ai-queue)的任务
确认失败存储是否启用并正确配置
查看与重试的前提是失败任务已被持久化。检查 config/queue.php 中的 failed 配置:
- 推荐使用
database-uuids驱动(Laravel 12 默认),确保已运行迁移:php artisan queue:failed-table && php artisan migrate - 若用 Redis 存储失败任务,需配置
'driver' => 'redis'并确保 Redis 连接正常(redis-cli ping可验证) - 不建议仅用
log驱动——它只写日志,无法支持queue:retry等命令
处理重试后仍失败的任务
重试不是万能解法。若任务反复失败,应结合上下文干预:
- 在任务类中实现
failed()方法,记录完整异常、触发告警或降级逻辑 - 使用
php artisan queue:forget 123移除已确认无修复价值的任务,避免干扰统计 - 对高频失败任务,可临时调高
retry_after或增加--tries参数再试,排查是否为瞬时依赖问题(如第三方 API 限流)











