如何在PHP中的celery-rabbitmq队列上发布任务?

前端之家收集整理的这篇文章主要介绍了如何在PHP中的celery-rabbitmq队列上发布任务?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下版本的芹菜和rabbitmq安装 –

celery 3.1.6
rabbitmq 3.1.1

我可以将任务发布到PHP的默认队列 –

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

我的工作模块在python –

# tasks.py
from celery import Celery
celery = Celery('tasks',broker='amqp://guest:guest@localhost: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代码将任务发布在默认队列中:芹菜(显然不在演示队列中).

如何在PHP中的特定队列上发布我的任务?请帮忙.

默认情况下,Celery的PHP客户端将队列名称设置为“芹菜”.

为了将队列更改为发布,必须在实例化与Celery的连接时指定队列名称.
所以,如果您使用“-Q演示”选项启动您的Celery员工,那么您在PHP中与Celery的连接应该是 –

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

注意:使用-Q选项,exchange和routing_key值与queue_name相同.

请尝试并分享结果.

关于交换和约束:

与电话服务类似,Exchange就像“电话操作符”,其唯一的工作就是通过routing_key来“直接拨打你”.

然后绑定是“您的电话号码”,其作为路由_key到您的电话.

注意:交换根据绑定(routing_key)将传入消息重定向到队列的过程是DIRECT交换类型.
AMQP还有其他类型的交换,您可以在AMQP文档中阅读.

你也可以参考这个Celery page

猜你在找的PHP相关文章