必须配置消息队列驱动并适配环境,否则异步任务降级为同步;需安装think-queue扩展、修改queue.php为redis驱动、正确填写Redis连接参数、设置队列名称并对应监听指令,最后通过Redis命令或测试代码验证入队成功。

要在ThinkPHP6.0中启用异步任务处理能力,必须先完成消息队列的驱动配置与基础环境适配,否则所有投递操作都会降级为同步执行,失去解耦意义。
安装并启用 think-queue 扩展
在项目根目录执行命令安装官方队列扩展:composer require topthink/think-queue。安装完成后,框架会自动生成 config/queue.php 配置文件,但此时默认仍为 'default' => 'sync',即同步模式,所有任务立即执行、无法异步。
这一步不做,后续任何 Queue::push() 调用都只是伪异步——看着像队列,实则阻塞主线程。
配置 Redis 驱动(推荐)
打开 config/queue.php,将 'default' 值改为 'redis',并在 'connections.redis' 中确认以下字段已正确填写:
立即学习“PHP免费学习笔记(深入)”;
【host 和 port 必须与你本地 Redis 服务实际地址一致】,例如 'host' => '127.0.0.1'、'port' => 6379;若 Redis 设置了密码,'password' 字段不可为空字符串,否则连接失败静默丢弃任务。
确保 PHP 已安装 phpredis 扩展,否则 Redis 驱动初始化会报错且不提示具体原因。
设置队列名称与监听隔离
在 'connections.redis' 配置块中,找到 'queue' => 'default' 这一行。
这个值不是随便起的名字,它会作为 Redis List 键的前缀,最终生成类似 queues:default 的 key。如果你业务中要区分短信、站内信、邮件三类任务,建议分别设为 'sms'、'notice'、'email'。
修改后,必须同步更新命令行监听指令:比如改成 'queue' => 'notice',就要用 php think queue:listen --queue notice 启动监听,否则任务发进去了,没人取。
验证配置是否生效
方法一:临时切换驱动为 database,运行 php think migrate:run 生成 jobs 表,再改回 redis 并清空表——能成功建表说明扩展加载正常。
方法二:在控制器中写一行测试代码:Queue::push('app\job\TestJob', ['test' => time()]);,然后立刻查 Redis:redis-cli lrange queues:default 0 -1。如果返回非空数组,说明任务已入队;如果返回 (empty list or set),检查配置中的 queue 值是否拼写错误或大小写不一致。
注意:Redis 驱动下,Queue::push() 返回的是随机字符串(如 "0000018a9f4b3c..."),不是布尔值。返回 false 才代表入队失败。



















