我在rabbitmq-server上执行celery时遇到问题。我搜索并找到了a link,但它并没有帮助我。 我的环境是ubuntu 14.04,python 2.7.6,芹菜3.1.15,Django 1.7。 引用a link,我在本地安装了rabbitmq-server。我在rabbitmq-server中添加了用户,vhost并设置了权限。
$ sudo rabbitmqctl add_user tonyg password
$ sudo rabbitmqctl add_vhost vir_host
$ sudo rabbitmqctl set_permissions -p vir_host tonyg ".*" ".*" ".*"
我的芹菜在django中的设置如下。
BROKER_URL = 'amqp://tonyg:password@localhost:5672//vir_host'
CELERY_RESULT_BACKEND = 'amqp://tonyg:password@localhost:5672//vir_host'
CELERY_ACCEPT_CONTENT = [u'application/x-python-serialize', u'image/jpeg', u'image/bmp', u'image/png', u'image/tiff']
CELERY_TIMEZONE = 'Asia/Tokyo'
CELERY_ENABLE_UTC = True
CELERY_IGNORE_RESULT = False
除了默认配置之外,我没有设置关于rabbitmq-server的任何内容。
我像这样执行了芹菜。
$ celery -A MyProj worker -l info
-------------- celery@ip-172-31-3-10 v3.1.15 (Cipater)
---- **** -----
--- * *** * -- Linux-3.13.0-36-generic-x86_64-with-Ubuntu-14.04-trusty
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: MyProj:0x7f7453328b10
- ** ---------- .> transport: amqp://tonyg:**@localhost:5672//vir_host
- ** ---------- .> results: amqp://tonyg:password@localhost:5672//vir_host
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery
[tasks]
. MyProj.tasks. ......
. MyProj.tasks. ......
[2014-10-29 15:07:50,241: ERROR/MainProcess] consumer: Cannot connect to amqp://tonyg:**@127.0.0.1:5672//vir_host: [Errno 104] Connection reset by peer.
Trying again in 2.00 seconds...
[2014-10-29 15:07:55,251: ERROR/MainProcess] consumer: Cannot connect to amqp://tonyg:**@127.0.0.1:5672//vir_host: [Errno 104] Connection reset by peer.
Trying again in 4.00 seconds...
当我使用默认访客标识符设置芹菜时,
BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'amqp://guest:guest@localhost:5672//'
它确实运作良好。我不知道为什么。谁能帮助我?谢谢。
答案 0 :(得分:15)
运行rabbitmqctl list_vhosts
。输出将是:
Listing vhosts ...
/
vir_host
...done.
因此URL必须是:
amqp://tonyg:**@localhost:5672/vir_host
答案 1 :(得分:3)
感谢@ Krzysztof Szularz回答。结果你的网址不正确。它必须是
BROKER_URL = 'amqp://tonyg:password@localhost:5672/vir_host'
现在您通过localhost连接,它工作正常。如果您想远程连接,它将无法正常工作。您的帐户只是一个来宾帐户,并且没有管理员权限。因此用户必须通过locahost连接。如果您希望该用户从虚拟主机访问,您需要授予他这样做的权限。
运行此命令以授予用户管理员权限。
rabbitmqctl set_user_tags tonyg administrator
您可以阅读more about this here。