必须安装topthink/think-queue ^3.0扩展并注册ServiceProvider,否则Queue门面无实际驱动;需确认config/queue.php存在且default值与connections键名严格一致,Redis驱动须设type=>'redis'并启用php-redis扩展。

“Queue not found”不是类找不到,而是 队列功能根本没加载进来。ThinkPHP 6.0 自带的 think\facade\Queue 是一个门面类,它背后依赖 topthink/think-queue 扩展提供实际能力。没装扩展、没注册服务、没配驱动,都会导致调用时抛出这个错误。
确认 think-queue 扩展是否已安装
这是最常见原因。TP6 不自带队列实现,必须手动引入扩展:
- 运行
composer require topthink/think-queue ^3.0(别用 ^2.0,不兼容 TP6+ 容器) - 安装后检查
vendor/topthink/think-queue目录是否存在;若为空或报错,可能是镜像源问题,可换国内源重试 - 执行
php think list,看输出中是否有queue:*开头的命令(如queue:listen),没有说明扩展未生效
检查服务提供者是否注册(TP6/TP8 必须)
TP6+ 默认不自动注册队列服务,需手动声明:
- 打开
app/provider.php(TP6)或app/provider.php+ 确保think\queue\ServiceProvider::class已加入 providers 数组 - TP8 还需确认该类存在且可被自动加载;若仍无效,可临时在
config/app.php的providers中显式追加
验证配置文件是否正确加载
即使扩展装了、服务注册了,config/queue.php 缺失或格式错误也会让 Queue 门面初始化失败:
立即学习“PHP免费学习笔记(深入)”;
- 确保项目根目录下存在
config/queue.php,且返回的是标准 PHP 数组(不能是空文件、不能是 echo 或 var_dump) - 最简可用配置至少包含:
'default' => 'redis'和'connections' => ['redis' => ['type' => 'redis', 'host' => '127.0.0.1']] - 注意:键名大小写敏感,
'type'不能写成'driver','redis'作为连接名必须与'default'值完全一致
排除命名空间和自动加载问题
如果以上都对,但调用 Queue::push() 仍报错,可能是类未被正确加载:
- 确认你用的是
use think\facade\Queue;,不是use think\Queue;(后者是旧版路径,不存在) - 运行
composer dump-autoload -o强制刷新自动加载映射 - 检查任务类(如
app\job\SendMail)是否在composer.json的 autoload > psr-4 中覆盖,或是否放在默认可扫描路径(如app/job/)



















