2016. 1. 20. 11:52

[PhalconPHP] 팔콘PHP Queue 기능 사용

메뉴얼 : https://docs.phalconphp.com/en/latest/reference/queue.html

참고 : http://phalcontip.com/discussion/62/phalcon-with-beanstalkd


백그라운드로 작업하기 위해서는 Thread 를 사용해서 한파일에서 처리할 수도 있겠으나 팔콘에서는 기본적으로 Queue 기능을 지원한다. 자체적으로 기능을 지원하는건 아니고 외부 Beanstalkd 라는 메세지큐 서버를 사용해서 구현이 된다. 

물론 기본적으로 지원하는 Beanstalkd 말고 RabitMQ, Kafka, ZeroMQ 같은 걸 사용해도 될것이다.


간단하게 사용법을 정리하면 아래와 같다.

1. Beanstalkd 서버를 설치

  epel repo 가 설치되있다면 yum install beanstalkd 로 하면 설치가 끝

  없다면 https://github.com/kr/beanstalkd 여기서 다운받아 설치


  실행은 yum설치 시 service beanstalkd start하거나 개별로 beanstalkd -l 0.0.0.0 -p 11300 와 같이 아이피와 포트를 주고 실행하면 된다.(기본포트 11300)


2. 메세지 전달(Producer)

$queue = new \Phalcon\Queue\Beanstalk([ 'host' => 'localhost', 'port' => 11300 ]); $queue->put(array( '변수' => 1 ));


3. 메세지 처리(Consumer) - 메모리에 항상 상주해 있도록 한다.

$queue = new \Phalcon\Queue\Beanstalk([ 'host' => 'localhost', 'port' => 11300 ]); while(true) { while(($job = $queue->peekReady()) != false) { $message = $job->getBody(); print_r($message); $job->delete(); } sleep(5); } //이 부분은 하나가 아닌 동시에 여러개의 Consumer를 띄워 처리할때 메세지를 가져오는 방법이다. while (($job = $queue->reserve())) { $message = $job->getBody(); print_r($message); $job->delete(); }