broker_url = 'amqp://admin:123456@192.168.124.41:5672'

backend='redis://localhost:6379/2'


import time

from celery import Celery

broker_url = 'amqp://admin:123456@localhost:5672'

app = Celery(
    'mq_tasks',

    broker=broker_url,

    backend='redis://localhost:6379/2'
)
app.config_from_object('celery_conf')

@app.task

def add(x, y):
    time.sleep(4)

    print(x+y)

    return x + y

注意:

  • 使用admin用户连接rabbitmq:以下都可以

    • 'amqp://admin:123456@localhost.187:5672'

    • 'amqp://admin:123456@0.0.0.0:5672'

    • 'amqp://admin:123456@192.168.124.41:5672'

  • 使用guest用户连接rabbitmq:不能用ip

    • 'amqp://guest:guest@localhost:5672'

    • 'amqp://guest:guest@0.0.0.0:5672'

  • 设置vhost权限:

    • sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

      • set_permissions设置vhost的权限

      • /指vhost的路径

      • admin 用户,这里broker的用户配置一致

      • 后面的几个就是权限的配置

需要注意的坑:

  • librabbitmq建议不用装到python环境中,如果装了,就不能使用amqp://...

  • librabbitmq安装以后,可以使用pyamqp://

  • 由librabbitmq导致的问题:

    • TypeError: can't pickle memoryview objects

    • Received and deleted unknown message