https://github.com/chrisboulton/php-resque

https://github.com/chrisboulton/php-resque-scheduler


php-resque는 resque의 php port으로, priority job, delayed job 등을 구현하고 싶을 때 사용한다.


composer.json require 설정은 아래와 같이

{
    "require": {
        "chrisboulton/php-resque": "dev-master",
        "chrisboulton/php-resque-scheduler": "dev-master"
    }
}
php-resque 데몬과 php-resque-scheduler 데몬이 별도로 돌아가야 한다.

php-resque 데몬은 job이 오는 대로 바로 처리하는 데몬이고
php-resque-scheduler 데몬은 delay 시켰다가 php-resque 데몬에 job을 보내주는 역할을 한다

따라서 두개가 독립적으로 돌아가야 함

composer update 후 데몬의 동작은 다음과 같이

~/vendor/chrisboulton/php-resque-scheduler$ INTERVAL=1 VVERBOSE=1 APP_INCLUDE=../../autoload.php RESQUE_PHP=../php-resque/lib/Resque.php php resque-scheduler.php

~/vendor/bin$ VVERBOSE=1 QUEUE=default INTERVAL=1 ./resque

resque daemon의 경우 다음과 같이 편하게 script으로 작성해 두면 좋다. (job include도 겸해서)
<?php

require(__DIR__ . '/vendor/autoload.php');

putenv('VVERBOSE=1');
putenv('QUEUE=default');
putenv('INTERVAL=1');

require_once('My_Job.php');
require_once('vendor/bin/resque');

두개를 동시에 틀어두면 제대로 job이 가는 걸 확인할 수 있음

include './vendor/autoload.php';

$time = time() + 3;
$args = array(
    'name' => 'Chris'
);
Resque::enqueue('default', 'My_Job', $args);
ResqueScheduler::enqueueAt($time, 'default', 'My_Job', $args);

// 또는 이런 방식도 가능
// $datetime = new DateTime('2012-03-18 13:21:49');
// ResqueScheduler::enqueueAt(datetime, 'email', 'SendFollowUpEmail', $args);

예제 코드를 실행하면 그 즉시 job이 하나 가고, 3초 뒤에 job이 다시 가는 걸 확인할 수 있음


strlen() 에러가 credis/client.php 에서 발생하였는데

php extension redis가 설치되지 않아서임


( https://pecl.php.net/package/redis )

wget https://pecl.php.net/get/redis-2.2.7.tgz

phpize

make && make install

extension=redis.so 한 다음 다시 실행

'Programming > PHP' 카테고리의 다른 글

php-resque, php-resque-scheduler  (0) 2015.06.02
php-fpm 튜닝하기  (0) 2015.04.01
PHP Session에 대한 고찰  (0) 2014.11.16
그누보드 팝업  (0) 2014.07.16
그누보드4 여분필드 list write  (0) 2014.07.16
Facebook offline_token  (0) 2013.12.05
Posted by ejnahc

댓글을 달아 주세요