kami_sama / php-resque-ex-scheduler
php-resque-ex-scheduler是resque-scheduler的PHP版本,为PHP-Resque增加了任务调度的支持。
Requires
- kamisama/php-resque-ex: >=1.2.1
This package is not auto-updated.
Last update: 2023-03-29 04:23:30 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
- 启用记录到STDOUTVERBOSE
- 启用详细记录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
- 陈万琪(Kamisama)