异步队列

异步队列区别于 RabbitMQ Kafka 等消息队列,它只提供一种异步处理和异步延时处理的能力。

安装

  1. composer require hyperf/async-queue

配置

暂时只支持 Redis Driver

配置类型默认值备注
driverstringHyperf\AsyncQueue\Driver\RedisDriver::class
channelstringqueue队列前缀
retry_secondsint5失败后重新尝试间隔
processesint1消费进程数
  1. <?php
  2. return [
  3. 'default' => [
  4. 'driver' => Hyperf\AsyncQueue\Driver\RedisDriver::class,
  5. 'channel' => 'queue',
  6. 'retry_seconds' => 5,
  7. 'processes' => 1,
  8. ],
  9. ];

使用

消费消息

组件已经提供了默认子进程,只需要将子进程配置到 processes.php 中即可。

  1. <?php
  2. return [
  3. Hyperf\AsyncQueue\Process\ConsumerProcess::class,
  4. ];

发布消息

首先我们定义一个消息,如下

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Jobs;
  4. use Hyperf\AsyncQueue\Job;
  5. class ExampleJob extends Job
  6. {
  7. public function handle()
  8. {
  9. var_dump('hello world');
  10. }
  11. }

发布消息

  1. <?php
  2. declare(strict_types=1);
  3. use Psr\Container\ContainerInterface;
  4. use Hyperf\AsyncQueue\Driver\DriverFactory;
  5. class DemoService
  6. {
  7. protected $driver;
  8. public function __construct(DriverFactory $driverFactory)
  9. {
  10. $this->driver = $driverFactory->get('default');
  11. }
  12. public function publish()
  13. {
  14. return $this->driver->push(new ExampleJon());
  15. }
  16. }