需完成驱动安装、配置生成、进程注册、Job编写与投递验证五步闭环:1. composer require hyperf/async-queue;2. php bin/hyperf.php vendor:publish hyperf/async-queue并确认async_queue.php中processes>0且Redis驱动启用;3. 在processes.php注册Hyperf\AsyncQueue\Process\ConsumerProcess::class;4. 编写继承Job的ExampleJob,handle()中执行协程安全逻辑;5. 用DriverFactory->push投递任务,启动服务后观察ConsumerProcess日志及消费输出。

从零搭建Hyperf 2.2异步队列消费服务,需完成驱动安装、配置生成、进程注册、Job编写与投递验证五步闭环,缺一不可。
安装 async-queue 组件
执行命令安装核心依赖:composer require hyperf/async-queue。
这一步必须在项目根目录下运行,否则 composer 无法识别 autoload 配置路径。
生成并配置 async_queue.php
运行命令生成配置文件:php bin/hyperf.php vendor:publish hyperf/async-queue。
检查 config/autoload/async_queue.php 是否已存在,若未生成则说明 vendor:publish 命令执行失败,需确认 hyperf/async-queue 包是否真实写入 vendor 目录。
打开该文件,确保 'processes' => 1,【该值必须大于 0,否则 ConsumerProcess 不会被启动】;同时确认 'driver' => Hyperf\AsyncQueue\Driver\RedisDriver::class 已启用,且 'redis.pool' => 'default' 指向一个已配置的 Redis 连接池(如 config/autoload/redis.php 中定义)。
注册消费者进程
编辑 config/autoload/processes.php,在 return 数组中加入一行:Hyperf\AsyncQueue\Process\ConsumerProcess::class。
这行代码是启动异步消费进程的唯一开关,漏写或拼错类名将导致进程不拉起——常见错误是误写为 ConsumerProcess 而非完整命名空间路径。
编写 Job 类
在 app/Job/ExampleJob.php 创建新文件:
声明命名空间和继承关系:namespace App\Job; use Hyperf\AsyncQueue\Job;。
定义类并继承 Job:class ExampleJob extends Job;在构造函数中接收参数并赋值给 public 属性,例如 $this->params = $params;;注意【不要传入 PDO 或 Redis 实例等含资源句柄的对象,序列化会失败】。
实现 handle() 方法,其中所有逻辑将在独立的 ConsumerProcess 协程中执行,可安全调用数据库、HTTP 客户端等协程组件。
投递任务并验证执行
第一步:在控制器或 service 中获取容器实例,调用 $container->get(\App\Job\ExampleJob::class)->handle(['id' => 123]); —— 这只是同步执行,不走队列。
第二步:改用队列投递方式:$container->get(\Hyperf\AsyncQueue\Driver\DriverFactory::class)->get()->push(new \App\Job\ExampleJob(['id' => 123]));。
第三步:执行 php bin/hyperf.php start 启动服务,观察控制台日志是否出现 Process[ConsumerProcess] start;若无此日志,说明 processes.php 未生效或 async_queue.php 中 processes 值为 0。
第四步:触发投递动作后,检查终端是否打印出 var_dump($this->params) 内容——出现即表示消费成功。


















