esoastor/job-queue-manager

此包的最新版本(0.0.28)没有可用的许可证信息。

0.0.28 2023-08-13 10:01 UTC

This package is auto-updated.

Last update: 2024-09-13 12:14:50 UTC


README

允许创建和管理作业队列。

开始

使用 JobQueueManager 对象来初始化系统。构造函数需要一个 \Database\Schema\Constructor 对象(来自 esoastor/database-manager)和表名。对象将在数据库中创建表并准备就绪。

作业创建和配置

作业基于抽象类 Esoastor\JobQueueManager\ConstantJobEsoastor\JobQueueManager\OneTimeJob 创建。

在这些类中,你需要实现 handle() 方法,它包含作业的主要逻辑。

每个作业默认都提供以下方法

  • isUnique(): bool - 检查作业是否唯一。只能存在一个唯一的作业实例。
  • isConstant(): bool - 检查作业是否为常量。常量作业将在指定的时间间隔执行。

一次性作业

从此类继承的作业将执行一次然后被删除。

常量作业

常量作业将在指定的时间间隔执行。默认间隔为 1 分钟。还提供了额外的方法

  • getInterval(): int - 获取当前间隔(以秒为单位)。
  • setInterval(int $interval) - 设置间隔(以秒为单位)。

唯一作业

任何作业都可以通过在类中定义值为 trueprotected bool $isUnique 参数来使其唯一。

作业状态

在数据库中可以查看的作业状态

  • 运行中 - 作业正在运行
  • 开启 - 惰性常量作业,在适当的时间将运行
  • 错误 - 出现了某些问题

将作业添加到队列

JobQueueManager 是用于添加和执行作业的类。管理是通过以下方法完成的

  • addJob($job) - 添加作业。接受一个 Esoastor\JobQueueManager\Job 对象。
  • execute(string $jobId, bool $ignoreTimeOfNextRun = false) - 执行作业。
  • executeAll(bool $ignoreTimeOfNextRun = false) - 执行所有挂起的作业。

如果你在最后两个函数中将 $ignoreTimeOfNextRun 参数传递为 true,则忽略常量作业的时间约束,它们将按顺序执行。

事件和监听器

可以使用 addListeners() 添加监听器。监听器是 \Esoastor\EventManager\Listener 的子类(来自 esoastor/event-manager)。要工作,你需要实现 handle(object $event) 方法。

添加监听器的示例

$jobQueueManager->addListeners('error', [
    NotifyAboutErrorByEmail::class,
]);

可用的事件有 错误成功

示例和开发

作业和监听器的示例可以在 /examples 中找到,初始化示例在 index.php 中。

开发服务器 - https://:8899/,在 docker-compose.yml 启动时启动。