gemsnet/php-resque-scheduler

此包的最新版本(1.3)没有可用的许可证信息。

php-resque-scheduler是resque-scheduler的PHP端口,它为Resque添加了对调度项的支持。

1.3 2019-08-06 14:09 UTC

This package is auto-updated.

Last update: 2024-09-29 05:55:29 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的队列中。这意味着为了执行延迟或计划中的作业,需要运行工作者。

在根目录中包含了一个基本的“启动并运行”的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.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