amosoft / php-resque-scheduler
php-resque-scheduler 是 resque-scheduler 的 PHP 版本,增加了对 Resque 的调度项支持。
Requires
- php: >=5.3.0
- amosoft/php7-resque: 1.5.*
- psr/log: ~1.0
Suggests
- ext-proctitle: Allows php-resque to rename the title of UNIX processes to show the status of a worker.
README
php-resque-scheduler 是 resque-scheduler 的 PHP 版本,它增加了对将来在 Resque 中调度项的支持。
resque-scheduler 的 PHP 版本已被设计成几乎直接复制 Ruby 插件,并与 resque 的 PHP 版本 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- 启用将日志记录到 STDOUTVERBOSE- 启用详细日志记录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
- rayward
- atorres757
- tonypiper
- biinari
- cballou