umonkey/php-taskq

简单的任务队列

1.1.3 2020-07-15 10:22 UTC

This package is auto-updated.

Last update: 2024-09-15 19:34:32 UTC


README

适用于个人使用的简单任务队列。特性

  • 只需要一个数据库表即可工作。
  • 任务具有自定义负载和优先级。
  • 失败的任务最多重试10次。
  • 队列工作器在单独的进程运行,位于Web服务器(fpm)之外。
  • 任务运行器在另一个独立的进程中运行,以提高失败安全性。

添加任务

基本上,添加任务就是向名为 taskq 的表中插入。通常你调用TaskQueue类add 方法,它执行此操作并记录。

运行任务

运行 bin/taskq 脚本,它将处理其余部分。确保在它失败时重启它(使用cron或supervisord)。逻辑如下

  1. 获取文件锁。失败时退出(另一个实例正在运行)。
  2. 检查表 taskq,获取时间已到且优先级最高的第一个任务。
  3. 运行任务运行器进程。如果失败,推迟任务。如果成功(退出代码0),删除任务。
  4. 回到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() 中清理了日志。

待办事项

  • 将任务运行器移动到单独的类。
  • 为每个优先级创建单独的锁文件。