내가 설치 셀러리와 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의 특정 대기열에 내 작업을 게시하려면 어떻게합니까? 도와주세요.
내가 위에서 것은 possibile하지 않으면 내가 대신 다른 큐의 다른 작업으로 이동 한 거 오전 생각을 참조 할 수 있습니다. – Hussain
celery-php의 소스 코드를 확인하여 태스크의'exchange' 및'routing_key'를 지정하는 방법이 있는지 확인해야합니다. amqp에서 메시지를 대기열로 보내지 않으면 메시지를 교환기로 전송 한 다음 routing_key와 일치시켜 대기열에 메시지를 전달합니다. 트릭이 있습니다 : 여러분은'exchange = ""와 routing_key를 큐의 이름으로 설정할 수 있습니다 (예 :'routing_key = "demo"). 라우팅 레이어를 거치지 않고 직접 데모 큐에 메시지를 전달합니다. – asksol
amqp에 익숙하지 않다. 나는 셀러리 PHP 소스 코드를 철저히 조사하고 위의 것들을 시도 할 것이다. 나는 그것에 대해 당신에게 알려줄 것이다. 답장을 보내 주셔서 감사합니다. – Hussain