umonkey / php-taskq
简单的任务队列
1.1.3
2020-07-15 10:22 UTC
Requires
- php: >=7.2
- umonkey/php-dbal: >=1.0.0
README
适用于个人使用的简单任务队列。特性
- 只需要一个数据库表即可工作。
- 任务具有自定义负载和优先级。
- 失败的任务最多重试10次。
- 队列工作器在单独的进程运行,位于Web服务器(fpm)之外。
- 任务运行器在另一个独立的进程中运行,以提高失败安全性。
添加任务
基本上,添加任务就是向名为 taskq
的表中插入。通常你调用TaskQueue类 的 add
方法,它执行此操作并记录。
运行任务
运行 bin/taskq
脚本,它将处理其余部分。确保在它失败时重启它(使用cron或supervisord)。逻辑如下
- 获取文件锁。失败时退出(另一个实例正在运行)。
- 检查表
taskq
,获取时间已到且优先级最高的第一个任务。 - 运行任务运行器进程。如果失败,推迟任务。如果成功(退出代码0),删除任务。
- 回到2。
处理任务
创建一个服务,将其注册到你的服务控制器中。对于名为 acme.fooBar
的任务,必须有一个名为 acme
的服务,其中包含一个名为 fooBar
的方法。该方法将接收由调用者传递的数组数据。
使用异常处理失败任务。
数据库结构
CREATE TABLE IF NOT EXISTS `taskq` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`added_at` DATETIME NOT NULL,
`run_after` DATETIME NOT NULL,
`priority` INTEGER NOT NULL DEFAULT 0,
`payload` MEDIUMBLOB NOT NULL,
`attempts` INTEGER UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY (`priority`),
KEY(`run_after`),
KEY(`attempts`)
) DEFAULT CHARSET utf8;
更改
2020-07-15:
- 修复了自动加载问题。
2020-07-01:
- 在
add()
中清理了日志。
待办事项
- 将任务运行器移动到单独的类。
- 为每个优先级创建单独的锁文件。