QUEUE_CONNECTION填错会导致队列静默降级为sync驱动,所有任务同步执行且jobs表为空;正确值应为config/queue.php中connections数组存在的键名,如database、redis等。

QUEUE_CONNECTION 填错会导致队列完全失效,且不报错——它会静默降级为 sync 驱动,所有 dispatch() 都变成同步执行,jobs 表空空如也。
QUEUE_CONNECTION 不是数据库名,是 config/queue.php 里的连接键名
常见错误写法:QUEUE_CONNECTION=your_database_name。Laravel 根本不认识这个值,直接 fallback 到 sync 驱动。
正确做法只用 Laravel 内置的连接标识:
-
QUEUE_CONNECTION=database(开发/轻量生产,依赖jobs表) -
QUEUE_CONNECTION=redis(中高并发,需predis/predis和 Redis 服务在线) -
QUEUE_CONNECTION=sqs或其他云驱动(需额外配置)
检查 config/queue.php 中 'connections' 数组是否真有对应 key,比如 'database' => [...] ——不是靠猜,是看源码。
database 驱动必须跑完三步迁移,缺一不可
只执行 php artisan migrate 不够,jobs 和 failed_jobs 表必须显式生成:
-
php artisan queue:table→ 创建jobs表(任务队列本体) -
php artisan queue:failed-table→ 创建failed_jobs表(失败任务归档) -
php artisan migrate→ 真正建表
漏掉任意一步,queue:work 启动后会静默跳过,无日志、无报错、无记录——就像没配一样。
redis 驱动连不上时,queue:work 会直接报 Connection refused
这不是队列逻辑问题,是底层连接失败。排查点很具体:
-
composer require predis/predis:^1.0是否已安装?Laravel 13.2.0 不再自带 -
.env中REDIS_HOST、REDIS_PORT、REDIS_PASSWORD是否和config/database.php里redis.default完全一致? - Redis 服务是否在运行?
redis-cli ping能否返回PONG?
哪怕只差一个端口或密码为空却配了 REDIS_PASSWORD=,queue:work 就起不来,且错误信息就一行:Connection refused。
任务不入队、不执行、无日志?先看 failed_jobs 表有没有记录
如果 failed_jobs 表里有数据,说明队列系统是通的,问题出在任务逻辑或重试策略;如果表为空,但你又确认 QUEUE_CONNECTION 和迁移都对,那大概率是 dispatch() 被调用了但没真正进队——比如任务类没实现 ShouldQueue,或被中间件/条件提前 return 了。
别急着改代码,先手动触发一次:
- 加个最简任务:
dispatch(function () { \Log::info('test job ran'); }); - 查
jobs表有没有新记录 - 再跑
php artisan queue:work --once看日志是否打出那条 info
这三步比翻文档快得多。很多“配置异常”其实只是某次 deploy 漏掉了迁移或改错了 .env,而不是框架本身有问题。


















