Python 芹菜RabbitMQ分布式队列测试消息
我不断收到:Python 芹菜RabbitMQ分布式队列测试消息,python,rabbitmq,celery,message-queue,Python,Rabbitmq,Celery,Message Queue,我不断收到:ERROR/MainProcess]消费者:无法连接到amqp://ec2celeryuser当我在终端上运行芹菜-任务工人时 基本上,我要做的是让芹菜/rabbitmq在(2)个ec2实例中正常工作。将tasks.py中的愚蠢任务传递给rabbitmq进行处理 实例1-容纳rabbitMQ 这当前运行RabbitMQ正常。如果我运行sudo rabbitmqctl status它将输出: Status of node 'rabbit@ip-xx-xxx-xxx-xx' ... [{
ERROR/MainProcess]消费者:无法连接到amqp://ec2celeryuser
当我在终端上运行芹菜-任务工人时
基本上,我要做的是让芹菜/rabbitmq在(2)个ec2实例中正常工作。将tasks.py中的愚蠢任务传递给rabbitmq进行处理
实例1-容纳rabbitMQ
这当前运行RabbitMQ正常。如果我运行sudo rabbitmqctl status
它将输出:
Status of node 'rabbit@ip-xx-xxx-xxx-xx' ...
[{pid,786},
二,。实例2——家里的芹菜
我正在尝试在实例2
上对实例1运行芹菜,在终端中使用以下命令:
芹菜-一名工人
我有一个文件celeryconfig.py
:
BROKER_URL = 'amqp://ec2celeryuser:mypasshere@xx.xxx.xx.xx:5672/celeryserver1/'
#CELERY SETTINGS
CELERY_IMPORTS = ("tasks",)
CELERY_RESULT_BACKEND = "amqp"
from tasks import add
result = add.delay(4, 4) # call task
result_sum = result.get(timeout=5) # wait to get result for a maximum of 5 seconds
from celery import Celery
app = Celery('tasks', broker='amqp://ec2celeryuser:mypasshere@xx.xxx.xx.xx:5672/celeryserver1/')
@app.task
def add(x, y):
return x + y
我有一个文件client.py
:
BROKER_URL = 'amqp://ec2celeryuser:mypasshere@xx.xxx.xx.xx:5672/celeryserver1/'
#CELERY SETTINGS
CELERY_IMPORTS = ("tasks",)
CELERY_RESULT_BACKEND = "amqp"
from tasks import add
result = add.delay(4, 4) # call task
result_sum = result.get(timeout=5) # wait to get result for a maximum of 5 seconds
from celery import Celery
app = Celery('tasks', broker='amqp://ec2celeryuser:mypasshere@xx.xxx.xx.xx:5672/celeryserver1/')
@app.task
def add(x, y):
return x + y
我有一个文件tasks.py
:
BROKER_URL = 'amqp://ec2celeryuser:mypasshere@xx.xxx.xx.xx:5672/celeryserver1/'
#CELERY SETTINGS
CELERY_IMPORTS = ("tasks",)
CELERY_RESULT_BACKEND = "amqp"
from tasks import add
result = add.delay(4, 4) # call task
result_sum = result.get(timeout=5) # wait to get result for a maximum of 5 seconds
from celery import Celery
app = Celery('tasks', broker='amqp://ec2celeryuser:mypasshere@xx.xxx.xx.xx:5672/celeryserver1/')
@app.task
def add(x, y):
return x + y
我已正确设置了一个vhost
,一个用户ec2celeryuser
,并授予此用户以下权限:
sudo rabbitmqctl set_permissions -p /celeryserver1 ec2celeryuser ".*" ".*" ".*"
如果我这样做:sudo rabbitmqctl list\u RabbitMQ(实例1)上的用户
,它会显示:
ec2celeryuser []
guest [administrator
我尝试了两个用户名及其密码,但没有更改
我一直在跟踪,而且运气不好
我做错了什么?显然存在连接问题,但我做错了什么
谢谢大家! 所以我发现这里有一些地方不对劲。首先,tasks.py
中rabbitMQ的代理URL似乎不正确。它应该像下面这样读
app=芹菜('tasks',broker='amqp://ec2celeryuser:ec2celerypassword@xx.xxx.xx.xx/celeryserver1/”)
此外,您可能希望在运行辅助进程时指定希望芹菜提供服务的应用程序。您可以通过从tasks.py
目录中运行cellery-A tasks worker
来完成此操作
另一件事是在client.py
中调用任务的代码似乎不正确。从芹菜文档中,您可以按如下方式调用该任务:
from tasks import add
result = add.delay(4, 4) # call task
result_sum = result.get(timeout=5) # wait to get result for a maximum of 5 seconds
解决这些问题可能会解决您的问题,或者至少会让您更接近。因此,我发现这里有一些问题。首先,tasks.py
中rabbitMQ的代理URL似乎不正确。它应该像下面这样读
app=芹菜('tasks',broker='amqp://ec2celeryuser:ec2celerypassword@xx.xxx.xx.xx/celeryserver1/”)
此外,您可能希望在运行辅助进程时指定希望芹菜提供服务的应用程序。您可以通过从tasks.py
目录中运行cellery-A tasks worker
来完成此操作
另一件事是在client.py
中调用任务的代码似乎不正确。从芹菜文档中,您可以按如下方式调用该任务:
from tasks import add
result = add.delay(4, 4) # call task
result_sum = result.get(timeout=5) # wait to get result for a maximum of 5 seconds
修复这些问题可能会解决您的问题,或者至少会让您更接近。感谢用户natdempk
帮助我修复队列的配置语法
问题是在rabbitmq中创建vhost
,如:
sudo rabbitmqctl add_vhost /celeryserver1
当它应该是:
sudo rabbitmqctl add_vhost celeryserver1
然后,我必须为我的用户重置权限ec2celeryuser
如下:
sudo rabbitmqctl set_permissions -p celeryserver1 ec2celeryuser ".*" ".*" ".*"
我意识到这就是问题所在的方式是:我访问了/var/log/rabbitmq/
看到:
=INFO REPORT==== 30-Apr-2014::12:45:58 ===
accepted TCP connection on [::]:5672 from xx.xxx.xxx.xxx:45964
=INFO REPORT==== 30-Apr-2014::12:45:58 ===
starting TCP connection <x.xxx.x> from from xx.xxx.xxx.xxx:45964
=ERROR REPORT==== 30-Apr-2014::12:46:01 ===
exception on TCP connection <x.xxx.x> from from xx.xxx.xxx.xxx:45964
{channel0_error,opening,
{amqp_error,access_refused,
"access to vhost 'celeryserver1/' refused for user 'ec2celeryuser'",
'connection.open'}}
感谢用户natdempk
帮助我修复队列的配置语法
问题是在rabbitmq中创建vhost
,如:
sudo rabbitmqctl add_vhost /celeryserver1
当它应该是:
sudo rabbitmqctl add_vhost celeryserver1
然后,我必须为我的用户重置权限ec2celeryuser
如下:
sudo rabbitmqctl set_permissions -p celeryserver1 ec2celeryuser ".*" ".*" ".*"
我意识到这就是问题所在的方式是:我访问了/var/log/rabbitmq/
看到:
=INFO REPORT==== 30-Apr-2014::12:45:58 ===
accepted TCP connection on [::]:5672 from xx.xxx.xxx.xxx:45964
=INFO REPORT==== 30-Apr-2014::12:45:58 ===
starting TCP connection <x.xxx.x> from from xx.xxx.xxx.xxx:45964
=ERROR REPORT==== 30-Apr-2014::12:46:01 ===
exception on TCP connection <x.xxx.x> from from xx.xxx.xxx.xxx:45964
{channel0_error,opening,
{amqp_error,access_refused,
"access to vhost 'celeryserver1/' refused for user 'ec2celeryuser'",
'connection.open'}}
谢谢你的全面回复。我已经实现了这一点,但仍然出现错误/MainProcess]consumer:无法连接到amqp://ec2celeryuser@xx.xxx.xx.xx:5672/celeryserver1/还有其他想法吗?@CodeTalk我认为你的经纪人URL仍然是错误的。它们的形式应为:amqp://user:password@IP:port/vhost/
@CodeTalk您是否仍然缺少:代理
中的端口?就在那里。所有代码都是最新的。有什么想法吗?仍然抛出相同的问题我这样做了:sudo rabbitmqctl list_users,它显示:ec2celeryuser[]guest[administrator]这可能有问题吗?感谢您的全面回复。我已经实现了这一点,但仍然出现错误/MainProcess]consumer:无法连接到amqp://ec2celeryuser@xx.xxx.xx.xx:5672/celeryserver1/还有其他想法吗?@CodeTalk我认为你的经纪人URL仍然是错误的。它们的形式应为:amqp://user:password@IP:port/vhost/
@CodeTalk您是否仍然缺少:代理
中的端口?就在那里。所有代码都是最新的。有什么想法吗?仍然抛出相同的问题我这样做了:sudo rabbitmqctl list_users,它显示:ec2celeryuser[]guest[administrator]这可能有问题吗?胡乱猜测,但你的密码中有一些奇怪的字符吗?不,是字母数字,没有特殊字符。胡乱猜测,但你的密码中有一些奇怪的字符吗?不,是字母数字,没有特殊的字符。