iglocska/php-resque-ex-scheduler

php-resque-ex-scheduler 是 resque-scheduler 的 PHP 版本,增加了对 PHP-Resque 进行作业调度的支持。它是 Kamisama 为 MISP 制作的仓库的分支。

dev-master 2024-09-05 09:53 UTC

This package is auto-updated.

Last update: 2024-09-05 09:54:31 UTC


README

php-resque-scheduler 是 resque-scheduler 的 PHP 版本,增加了对 Resque 中的未来项目的支持。

resque-scheduler 的 PHP 版本被设计成几乎与 Ruby 插件直接拷贝,旨在与 PHP 版本的 resque,php-resque 一起工作。

目前,php-resque-scheduler 仅支持延迟作业,这是将作业推送到队列并在特定时间戳或秒数后运行的能力。计划在未来版本中支持重复作业(类似于 CRON)。

由于 PHP 版本几乎是与 Ruby 版本相同的 API 拷贝,因此它与 Ruby 版本的 Web 界面兼容,提供了查看和管理延迟作业的能力。

延迟作业

以下引用 Ruby resque-scheduler 的文档

延迟作业是你希望在未来的某个时间点放入队列的单次作业。经典示例是发送电子邮件

require 'Resque/Resque.php';
require 'ResqueScheduler/ResqueScheduler.php';

$in = 3600;
$args = array('id' => $user->id);
ResqueScheduler::enqueueIn($in, 'email', 'SendFollowUpEmail', $args);

上述操作将在延迟队列中存储作业 1 小时,然后从队列中取出作业并提交给 Resque 的 email 队列以进行处理,一旦有工作进程可用。

除了传递以秒为单位的相对时间外,你还可以将 DateTime 对象或包含 UNIX 时间戳的整数作为时间戳提供给 enqueueAt 方法

require 'Resque/Resque.php';
require 'ResqueScheduler/ResqueScheduler.php';

$time = 1332067214;
ResqueScheduler::enqueueAt($time, 'email', 'SendFollowUpEmail', $args);

$datetime = new DateTime('2012-03-18 13:21:49');
ResqueScheduler::enqueueAt(datetime, 'email', 'SendFollowUpEmail', $args);

注意:resque-scheduler 不能保证作业将在提供的时间触发。在提供的时间,resque-scheduler 将从延迟队列中取出作业并将其推送到 Resque 中适当的队列。下一个可用的 Resque 工作进程将获取作业。为了尽可能快地处理,请尽可能保持队列为空。

工作进程

与 resque 一样,resque-scheduler 包含一个在后台运行的工作进程。该工作进程负责从调度/延迟队列中拉取项目并将其添加到 resque 的队列中。这意味着要执行延迟或计划中的作业,工作进程需要运行。

在根目录中包含了一个基本的 "up-and-running" resque-scheduler.php 文件,该文件设置了一个运行工作进程的环境。它接受与 php-resque 相同的许多环境变量

  • REDIS_BACKEND - 要连接的 Redis 服务器
  • LOGGING - 启用将日志记录到 STDOUT
  • VERBOSE - 启用详细日志记录
  • VVERBOSE - 启用非常详细日志记录
  • INTERVAL - 在检查计划/延迟队列之前睡眠此长时间
  • APP_INCLUDE - 启动时包含此文件(以启动您的应用程序)
  • PIDFILE - 将工作进程的 PID 写入此文件

resque-scheduler 工作进程需要 resque 才能工作。演示 resque-scheduler.php 工作进程允许你通过提供 RESQUE_PHP 环境变量来指定 Resque.php 的路径。如果没有提供并且 resque 未经加载,resque-scheduler 将尝试从您的 include 路径(require_once 'Resque/Resque.php';')加载它

使用 resque-scheduler.php 很容易启动 resque-scheduler 工作进程:$ RESQUE_PHP=../resque/lib/Resque/Resque.php php resque-scheduler.php

事件/钩子系统

php-resque-scheduler 使用与 php-resque 相同的事件系统,并公开以下事件。

afterSchedule

在作业被添加到计划后调用。传递的参数是时间戳、作业的队列、作业的类名和作业的参数。

beforeDelayedEnqueue

在任务从延迟队列中取出后立即调用,并在任务添加到resque队列之前。传递的参数包括任务的队列、任务的类名以及任务的参数。

贡献者

  • chrisboulton
  • 陈万琪(Kamisama)