mcfedr / php-resque-scheduler
php-resque-scheduler 是 resque-scheduler 的 PHP 版本,它为 Resque 添加了对未来项目排程的支持。
Requires
- mcfedr/php-resque: ~1.3
README
php-resque-scheduler 是 resque-scheduler 的 PHP 版本,它为 Resque 添加了对未来项目排程的支持。
resque-scheduler 的 PHP 版本设计成几乎是 Ruby 插件的直接复制,并与 php-resque 的 PHP 版本一起工作。
目前,php-resque-scheduler 只支持延迟作业,即可以将作业推送到队列并在某个特定时间戳或秒数后运行。计划在未来的版本中支持重复作业(类似于 CRON)。
由于 PHP 版本几乎是 Ruby 版本的直接 API 复制,因此它与 Ruby 版本的 Web 界面兼容,提供查看和管理延迟作业的能力。
要求
- PHP 5.3+
- Redis 2.2+
- PHP-Resque 1.2+
- 推荐但不强制:Composer
入门
使用 php-resque-scheduler 最简单的方法是在您的项目内部将其作为 Composer 软件包安装。虽然不是强制性的,但 Composer 可以大大简化操作。
如果您不熟悉 Composer,请参阅 https://getcomposer.org.cn/。
-
将 php-resque-scheduler 添加到应用程序的 composer.json 文件中。
{ ... "require": { "chrisboulton/php-resque-scheduler": "dev-master", "php": ">=5.3.0" }, ... }
-
运行
composer install
。 -
如果您还没有做,请将 Composer 自动加载添加到项目初始化文件中。(示例)
require 'vendor/autoload.php';
延迟作业
以下引用自 Ruby resque-scheduler 的文档
延迟作业是你想在未来的某个时间点放入队列的一次性作业。经典例子是发送电子邮件
$in = 3600; $args = array('id' => $user->id); ResqueScheduler::enqueueIn($in, 'email', 'SendFollowUpEmail', $args);
上述代码将在延迟队列中存储作业 1 小时,然后从队列中取出作业并提交给 Resque 的 email
队列进行处理,一旦有可用的工作者即可处理。
除了传递以秒为单位的相对时间外,您还可以向 enqueueAt
方法提供时间戳,该时间戳可以是 DateTime 对象或包含 UNIX 时间戳的整数
$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也包括一个在后台运行的worker。这个worker负责从调度/延迟队列中拉取项目并将其添加到resque的队列中。这意味着要执行延迟或计划中的作业,worker需要正在运行。
bin/目录中包含了一个基本的“启动运行”的resque-scheduler文件,用于设置运行worker的环境。
启动worker与Ruby版本非常相似
$ LOGGING=1 php bin/resque-scheduler
它接受许多与php-resque相同的环境变量
REDIS_BACKEND
- 要连接的Redis服务器LOGGING
- 启用输出到STDOUT的日志记录VERBOSE
- 启用详细日志记录VVERBOSE
- 启用非常详细日志记录INTERVAL
- 在检查调度/延迟队列之前睡眠这段时间APP_INCLUDE
- 启动时包含此文件(用于启动您的应用程序)PIDFILE
- 将worker的PID写入此文件
resque-scheduler worker需要resque才能运行。示例resque-scheduler worker使用Composer自动加载器加载Resque.php。
使用包含的示例很容易启动resque-scheduler worker:$ bin/resque-scheduler
事件/钩子系统
php-resque-scheduler使用与php-resque相同的相同事件系统,并公开以下附加事件
afterSchedule
在作业已被添加到计划后调用。传递的参数是时间戳、作业的队列、作业的类名和作业的参数。
beforeDelayedEnqueue
在作业从延迟队列中取出并添加到resque队列之前立即调用。传递的参数是作业的队列、作业的类名和作业的参数。