我有下面安裝了芹菜和RabbitMQ的版本 -如何在PHP中的celery-rabbitmq隊列上發佈任務?
芹菜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));
我的工人模塊是蟒蛇 -
# 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(顯然不在演示隊列)。
如何在PHP中的特定隊列上發佈我的任務?請幫忙。
我想我會去有不同的任務,而不是不同的隊列,如果上面的東西不是不可能性。 – Hussain
你應該檢查celery-php的源代碼,看看是否有辦法指定任務的'exchange'和'routing_key'。在amqp中,您不會將消息發送到隊列,而是將它們發送給交換機,然後通過匹配routing_key將消息傳遞到隊列。有一個技巧:你可以將'exchange =「」'和routing_key設置爲一個隊列的名字(例如'routing_key =「demo」',它會直接將消息傳遞給演示隊列,繞過路由選擇層。 – asksol
I我不太熟悉amqp,我會詳細介紹一下芹菜-php的源代碼,然後嘗試一下上面的內容,我會告訴你的,謝謝你的回覆。 – Hussain