hatch-is/
php-resque-scheduler
php-resque-scheduler 是 resque-scheduler 的 PHP 版本,为 Resque 添加了对未来调度项目的支持。
Requires
- chrisboulton/php-resque: < 1.3
This package is not auto-updated.
Last update: 2024-09-14 18:26:11 UTC
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
队列进行处理,一旦有工作进程可用。
除了传递秒数的相对时间外,还可以向 enqueueAt
方法提供一个时间戳,该时间戳可以是 DateTime 对象或包含 UNIX 时间戳的整数。
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 的队列中。这意味着为了执行延迟或计划中的作业,工作进程需要运行。
根目录中包含一个基本的 "运行中" 的 resque-scheduler.php 文件,它设置了一个运行的工作进程环境。它接受与 php-resque 相同的许多环境变量
RESQUE_CLASS
- 要与之一起工作的 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 将尝试从您的包含路径中加载它(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