PHP-Resque是现成的框架,基於 Redis 开发消息队列系统,消息队列服务要求比较轻量级,用于创建后台作业,将这些作业放在多个队列中,并在稍后处理它们。发短信,发邮件,执行不那么着急的数据库操作等等,比如发送邮件时,因为要连接邮件服务器,往往需要5-10秒甚至更长时间,如果能先给用户一个成功的提示信息,然后在后台慢慢处理发送邮件的操作,显然会有更好的用户体验。
1、composer下载
新建composer.json,内容如下
{
“ require ”:{
“ chrisboulton / php-resque ”:“ 1.2 ”
}
}
运行composer install。
执行 git clone https://github.com/chrisboulton/php-resque.git
3、手动zip下载地址:https://api.github.com/repos/chrisboulton/php-resque/zipball/0549d6c88a4aed934655b7c03b6153349d6c3ad0
PHP 5.3+
Redis 2.2+
在Resque中,一个后台任务被抽象为由三种角色共同完成:
在Resque中,有一个很重要的设计:一个Worker,可以处理一个队列,也可以处理很多个队列,并且可以通过增加Worker的进程/线程数来加快队列的执行速度。
流程如下:
编写一个Worker(后续业务处理)
class PHP_Job
{
public function perform()
{
sleep(120);
fwrite(STDOUT, 'Hello!');
}
}
在Resque的设计中,一个Job必须存在一个perform方法,Worker则会自动运行这个方法
将Job插入队列
php queue.php PHP_Job
if(empty($argv[1])) {
die('Specify the name of a job to add. e.g, php queue.php PHP_Job');
}
require __DIR__ . '/init.php';
date_default_timezone_set('GMT');
Resque::setBackend('127.0.0.1:6379');
$args = array(
'time' => time(),
'array' => array(
'test' => 'test',
),
);
$jobId = Resque::enqueue('default', $argv[1], $args, true);
echo "Queued job ".$jobId."\n\n";
查看Job运行情况
php check_status.php b1f01038e5e833d24b46271a0e31f6d6
我们刚才创建的Job状态为1。在Resque中,一个Job有以下4种状态:
Resque_Job_Status::STATUS_WAITING = 1; (等待)
Resque_Job_Status::STATUS_RUNNING = 2; (正在执行)
Resque_Job_Status::STATUS_FAILED = 3; (失败)
Resque_Job_Status::STATUS_COMPLETE = 4; (结束)
运行Worker
QUEUE=default php resque.php
参数:VVERBOSE=1 查看work工作状态
总结一下Redis中的key对应的内容及其含义如下:
resque:workers (set) - 存放所有的worker,每一个值都是{worker host}:{进程ID}:{queue的名称}
resque:queues (set) - 存放所有queue的名称
resque:queue:default (list) - 保存这个队列中等待执行的Job
resque:job:52f5abf5344094efc417e7ea8f1aa083:status (string) - 存放job的状态信息
resque:stat:processed (string) - 保存所有worker执行job成功的个数
resque:stat:processed:jun-Ubuntu:25122:* (string) - 保存一个worker执行job成功的个数
resque:worker:jun-Ubuntu:25122:*:started (string) - 保存一个worker的启动时间
resque:worker:jun-Ubuntu:25122:* (string) - 保存一个worker当前执行的Job的所有信息
redis重起:redis-cli -h 127.0.0.1 -p 6379 shutdown