php队列使用php-resque(2)

上一篇文章介绍了php-resque,本篇从实战出发。

其实该项目,在composer好像很久没有维护了。
在github,还有些代码修正。

但是,毕竟composer上的代码还是可用的!

首先,composer把项目装上,不再依赖github了。
然后,
在自己项目的任意目录建3个文件,名字,类名其实自己都能改。目录也无所谓。(本文放在/data/webroot/www/code/library/Command/daemon/)
本文的composer目录是/data/webroot/www/composer


test.php
<?php

require_once(realpath( dirname(__FILE__) .'/../common.php'));// 这是项目自身的db类

class My_Job22
{
    public function perform()
    {
        // Work work work
        echo $this->args['name'];
        
        $db = Sys::getdb();
        $sql="select user from admin limit 1"; //随便写一个数据库查询。
        $result = $db->fetchOne($sql);
        echo time(). $result."\n";
    }
}


add_task.php
<?php

require '/data/webroot/www/composer/vendor/autoload.php';
require_once(realpath( dirname(__FILE__) .'/../common.php'));// 这是项目自身的db类
Resque::setBackend('localhost:6379');
$args = array(
    'name' => '张三:'
);
Resque::enqueue('default', 'My_Job22', $args);


worker.php
<?php
require __DIR__.'/test.php';// 非常重要,必须包含任务类!!
require '/data/webroot/www/composer/vendor/chrisboulton/php-resque/resque.php';


在shell下。首先监听任务,并放到后台。
# ( QUEUE=default php /data/webroot/www/code/library/Command/daemon/worker.php ) &

开另外一个shell窗口,随便放一个任务。
#  php /data/webroot/www/code/library/Command/daemon/add_task.php

这时会发现第一个窗口出现结果。
这时,可以强行关闭第一个窗口,然后在第2个窗口中
# ps aux | grep worker.php
屏幕应该显示
php /data/webroot/www/jspeople/code/library/Command/daemon/worker.php

========
注意,如果任务文件test.php有改动,必须强行停止resque进程,再启动。
如果redis端口变化,则
QUEUE=default  REDIS_BACKEND=127.0.0.1:XXXX  php /data/webroot/www/code/library/Command/daemon/worker.php
=============
注意:linux下的后台运行命令,保持在后台

 (QUEUE=jobs3 REDIS_BACKEND=127.0.0.1:6380  php /var/www/worker3.php >> /tmp/1.log 2>&1 &)




猜你喜欢

转载自xieye.iteye.com/blog/2379583