任务不执行是因为未启动消费者进程;需确认在项目根目录安装、版本匹配、服务提供者注册、redis扩展启用及supervisor环境配置正确。

装完 topthink/think-queue 后任务不执行,不是包没装对,而是你还没启动消费者进程——Composer 只负责把代码拉进 vendor/,它不跑队列,也不监听 Redis。
composer require topthink/think-queue 装不成功?先盯住这三处
常见报错如 Package not found 或 Could not find a matching version,基本不是网络或镜像问题,而是环境错位:
- 没在 ThinkPHP 项目根目录执行(即含
composer.json、app/、config/的那层),而在D:\xampp\htdocs或vendor/topthink/thinkphp里乱试 -
composer.json中缺失"topthink/framework"版本约束,导致 Composer 不知道该匹配哪个think-queue版本 - TP6.3 项目却执行了
composer require topthink/think-queue:^4.0(那是 TP8 用的),应改用^3.0
装上了但 php think queue:listen 报 command not found
命令不可用,说明服务提供者没加载进去。这不是 Composer 的锅,是框架自动发现机制被关了或注册漏了:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查
composer.json里有没有"dont-discover": ["*"]—— 有就删掉,或改成具体值如["laravel/framework"] - 手动在
config/app.php的'providers'数组末尾加两行:'think\queue\service\QueueService::class'和'think\queue\command\QueueListenCommand::class' - 执行
composer dump-autoload刷新映射,再试php think list | grep queue
能跑命令但任务一直 pending,redis 驱动下 retry_after 不起作用?
TP6 的 think-queue Redis 驱动不读 retry_after 配置项,它只认 CLI 命令参数:
-
php think queue:work --tries=3 --delay=3才真正控制重试次数和失败后延迟入重试队列的时间 -
config/queue.php里的'expire' => 60是任务在 Redis 中的 TTL,超时后会被当“死任务”丢弃,不是重试间隔 - 若用数据库驱动,
retry_after才生效;Redis 下它被完全忽略
本地 OK,上线后 supervisor 启动的 consumer 没日志、不消费
90% 是权限或环境隔离问题,和代码无关:
- Supervisor 启动用户(如
www-data)没有读取.env的权限,导致它连的是127.0.0.1:6379而非线上 Redis 地址 - CLI PHP 配置(
memory_limit、max_execution_time)和 FPM 不同,consumer 进程因内存超限静默退出,supervisor 看不到错误 - 确认
supervisord.conf中的environment显式注入了APP_ENV=production和APP_DEBUG=0,否则配置加载路径可能错乱
最常被跳过的一步:装完扩展后,没人去确认 php -m | grep redis 是否真有输出——没 PHP Redis 扩展,think-queue 连 Redis 的第一步就卡死,但错误可能被吞掉,只表现为无响应。










