esoastor / job-queue-manager
Requires
- php: >=8.0
- esoastor/database-manager: *
- esoastor/event-manager: *
README
允许创建和管理作业队列。
开始
使用 JobQueueManager
对象来初始化系统。构造函数需要一个 \Database\Schema\Constructor
对象(来自 esoastor/database-manager
)和表名。对象将在数据库中创建表并准备就绪。
作业创建和配置
作业基于抽象类 Esoastor\JobQueueManager\ConstantJob
和 Esoastor\JobQueueManager\OneTimeJob
创建。
在这些类中,你需要实现 handle()
方法,它包含作业的主要逻辑。
每个作业默认都提供以下方法
isUnique(): bool
- 检查作业是否唯一。只能存在一个唯一的作业实例。isConstant(): bool
- 检查作业是否为常量。常量作业将在指定的时间间隔执行。
一次性作业
从此类继承的作业将执行一次然后被删除。
常量作业
常量作业将在指定的时间间隔执行。默认间隔为 1 分钟。还提供了额外的方法
getInterval(): int
- 获取当前间隔(以秒为单位)。setInterval(int $interval)
- 设置间隔(以秒为单位)。
唯一作业
任何作业都可以通过在类中定义值为 true
的 protected 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 启动时启动。