chrisboulton/php-resque-scheduler

本包的最新版本(1.1)没有提供许可证信息。

php-resque-scheduler 是 resque-scheduler 的 PHP 版本,为 Resque 添加了对未来项目排程的支持。

1.1 2013-03-10 21:53 UTC

This package is not auto-updated.

Last update: 2024-09-14 05:57:19 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 队列以供处理。

除了传递相对时间(以秒为单位)外,您还可以将时间戳作为 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 将尝试从您的包含路径中加载它(require_once 'Resque/Resque.php';'

启动resque-scheduler工作进程非常简单,使用resque-scheduler.php: $ 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