系统使用的Hyperf异步队列,文档。异步队列是依赖Redis的,所以需要安装和启动redis。这个功能主要的目的是能够让开发者在使用异步队列的时候能够查询到所有队列的调用记录,还有对当前队列调用的了解。方便对队列执行问题的排查。

一、特点

  • 需要安装redis,目前仅支持Redis
  • 所有队列的执行记录都会记录在 queue_list 表中

    二、使用

    具体是使用方式看官网的文档就可以了,但是这里我们推荐使用注解的方式去使用队列,注解的方式可以将任意的Service方法作为消息的投递,不需要额外再去定义Job类。 ```php <?php

declare(strict_types=1);

namespace App\Service;

use Hyperf\AsyncQueue\Annotation\AsyncQueueMessage;

class QueueService { /**

  1. * @AsyncQueueMessage
  2. */
  3. public function example($params)
  4. {
  5. // 需要异步执行的代码逻辑
  6. // 这里的逻辑会在 ConsumerProcess 进程中执行
  7. var_dump($params);
  8. }

} `` 注意:如果你的项目没装Redis或不用异步队列功能可以到config/autoload/processes.php\Hyperf\AsyncQueue\Process\ConsumerProcess::class` 注释了。

2.1 AsyncQueueMessage

  • $maxAttempts 最大重试次数 默认0
  • $delay 延迟执行时间 默认0
  • $pool 执行队列池(配置key),默认是default

2.2 示例:

在Demo模块中,在QueueService定义了三种消息类型

  • setDelayMessage 处理延迟队列消息
  • setLongMessage 处理长执行的队列消息,方便看到执行过程效果
  • setErrorMessage 处理抛出异常的队列消息

三、结果

3.1 执行记录

执行记录将每一个队列的执行加入到 queue_list 表中,方便排查执行结果和问题。对于异常也会记录异常信息,直接在管理后台的界面就可以查询。
image.png

3.2 队列状态

这里主要是读取Redis状态,查看当前正在执行,或者执行失败的队列状态,但是这里是redis的内容,可能因为项目重启等原因,这里的记录只是暂时存储。
image.png