Shopware 6.5计划任务失败排查:enqueue及dead_messages表消失问题
Shopware 6.5 计划任务失败排查指南
Shopware 6.5已完全弃用Enqueue组件,改用Symfony Messenger作为默认消息队列系统,所以原dead_messages表被移除是正常变更,失败任务现在由Messenger统一管理。以下是排查任务失败原因的具体方法:
1. 数据库直接查询失败任务详情
失败的任务会存储在messenger_messages表中,其中error字段直接记录了错误信息和堆栈跟踪,failed_at字段标记任务失败时间。可以通过SQL快速查询:
SELECT id, error, failed_at, message FROM messenger_messages WHERE failed_at IS NOT NULL;
2. 查看日志文件
默认情况下,任务失败的详细日志会输出到Shopware的日志文件中:
- 生产环境:
var/log/prod.log - 开发环境:
var/log/dev.log
搜索包含messenger、Failed to handle message或具体任务类名的日志条目,能找到完整的错误上下文和堆栈信息。
3. 使用Symfony Messenger命令行工具
Shopware集成了Messenger的命令,可直接在终端操作失败任务:
- 列出所有失败任务:
bin/console messenger:failed:show - 查看单个任务的详细错误信息(替换
<message-id>为实际任务ID):bin/console messenger:failed:show <message-id> - 重试单个失败任务,执行时会再次输出错误细节(若重试仍失败):
bin/console messenger:failed:retry <message-id>
Shopware 6.5 计划任务与Messenger的运作逻辑
- Shopware的后台计划任务会被封装为Messenger消息,发送到对应队列中执行
- 默认配置下,任务失败后会自动重试3次(可通过
messenger.yaml的retry_strategy调整),重试耗尽后标记为失败并存入messenger_messages表 - 若需自定义日志行为或重试策略,可修改
config/packages/messenger.yaml,例如调整重试次数、添加专属日志处理器等,基础默认配置已满足日常排查需求。
内容的提问来源于stack exchange,提问作者Torben
相关产品推荐
相关产品推荐

