2013-12-18 2 views
11

내가 설치 셀러리와 rabbitmq 버전의 아래에있는 -PHP에서 celery-rabbitmq 대기열에 작업을 게시하는 방법은 무엇입니까?

셀러리 3.1.6
내가 PHP에서 기본 큐에 작업을 게시 할 수 있습니다 3.1.1

rabbitmq -

//client.php 
<?php 
require 'celery-php/celery.php'; 
$c = new Celery('localhost', 'guest', 'guest', '/'); 
$result = $c->PostTask('tasks.add', array(2,2)); 

# tasks.py 
from celery import Celery 
celery = Celery('tasks', broker='amqp://guest:[email protected]:5672//') 
@celery.task(queue='demo', name='add') 
def add(x, y): 
    return x + y 
-

내 작업자 모듈은 파이썬에 이 작품

# terminal window 1 
$ celery -A tasks worker --loglevel=info 
# terminal window 2 
$ php -f client.php 

-

는이 같은 셀러리 노동자와 클라이언트를 실행합니다. 터미널 창 1에서 아래 출력을 봅니다.

Received task: tasks.add[php_52b1759141a8b3.43107845] 
Task tasks.add[php_52b1759141a8b3.43107845] succeeded in 0.000701383920386s: 4 

하지만 다른 대기열을 갖고 싶습니다. 시연을 위해 데모이라는 큐 하나만을 원한다고 가정 해 봅시다. 그래서 나는이 샐러리 작업자를 실행합니다. -

$ celery -A tasks worker --loglevel=info -Q demo 

그러나 작동하지 않습니다. 작업이 실행되지 않습니다. 아마도 PHP 코드가 기본 대기열에 작업을 게시하고 있기 때문일 것입니다. 셀러리 (분명히 데모 대기열에 없음).

PHP의 특정 대기열에 내 작업을 게시하려면 어떻게합니까? 도와주세요.

+0

내가 위에서 것은 possibile하지 않으면 내가 대신 다른 큐의 다른 작업으로 이동 한 거 오전 생각을 참조 할 수 있습니다. – Hussain

+0

celery-php의 소스 코드를 확인하여 태스크의'exchange' 및'routing_key'를 지정하는 방법이 있는지 확인해야합니다. amqp에서 메시지를 대기열로 보내지 않으면 메시지를 교환기로 전송 한 다음 routing_key와 일치시켜 대기열에 메시지를 전달합니다. 트릭이 있습니다 : 여러분은'exchange = ""와 routing_key를 큐의 이름으로 설정할 수 있습니다 (예 :'routing_key = "demo"). 라우팅 레이어를 거치지 않고 직접 데모 큐에 메시지를 전달합니다. – asksol

+0

amqp에 익숙하지 않다. 나는 셀러리 PHP 소스 코드를 철저히 조사하고 위의 것들을 시도 할 것이다. 나는 그것에 대해 당신에게 알려줄 것이다. 답장을 보내 주셔서 감사합니다. – Hussain

답변

4

기본적으로 Celery 용 PHP 클라이언트는 대기열 이름을 "셀러리"로 사용합니다.

게시 할 큐를 변경하려면 Celery에 대한 연결을 인스턴스화하는 동안 큐 이름을 지정해야합니다. 당신이 "-Q 데모"옵션을 사용하여 셀러리 노동자를 시작하는 경우 그래서, 다음, PHP에서 셀러리에 대한 연결이되어야합니다 -

$exchange = 'demo'; 
$binding = 'demo'; 
$c = new Celery('localhost', 'guest', 'guest', '/', $exchange, $binding); 

참고 : -Q 옵션을 사용하면 교환 및 routing_key 값과 동일 queue_name.

결과를 공유하고 공유하십시오. 교환 및 바인딩에 대해

:

전화 서비스와 유사으로는 Exchange는 그의 유일한 작업 routing_key의 도움으로 "당신에게 전화 문의를"하는 것입니다 "전화 운영자"와 같다.

바인딩은 전화의 라우팅 _ 키 역할을하는 "전화 번호"입니다.

참고 : Exchange가 바인딩 (routing_key)을 기반으로 수신 메시지를 대기열로 리디렉션하는이 프로세스는 직접 교환 유형입니다. AMQP에는 AMQP 설명서에서 읽을 수있는 몇 가지 다른 유형의 교환기가 있습니다.

또한이 Celery page

관련 문제