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]这可能有问题吗?胡乱猜测,但你的密码中有一些奇怪的字符吗?不,是字母数字,没有特殊字符。胡乱猜测,但你的密码中有一些奇怪的字符吗?不,是字母数字,没有特殊的字符。