У меня ниже версий сельдерея и кролика, установленных -
сельдерей 3.1.6
rabbitmq 3.1.1
Я могу отправить задание в очередь по умолчанию из PHP -
//client.php
<?php
require 'celery-php/celery.php';
$c = new Celery('localhost', 'guest', 'guest', '/');
$result = $c->PostTask('tasks.add', array(2,2));
Мой рабочий модуль находится в python -
# 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
Но я хочу иметь разные очереди. Для демонстрации предположим, что мне нужна только одна очередь под названием demo. Итак, я запускаю своего работника по сельдеру, как это -
$ celery -A tasks worker --loglevel=info -Q demo
Но он не работает. Задача не выполняется. Вероятно, это связано с тем, что PHP-код отправляет задачу в очередь по умолчанию: celery (видимо, не в очереди demo).
Как разместить свою задачу в конкретной очереди в PHP? Пожалуйста, помогите.