php-resque, php-resque-scheduler
Programming/PHP 2015. 6. 2. 14:19https://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 |
댓글을 달아 주세요