如果不更改软件版本,Celery 3.1如何配置为使用端口55672来访问rabbitmq而不是默认的15672?
RabbitMQ版本2. *使用端口55672作为管理插件,但Kombu 3.0默认使用端口15672来访问管理插件。 (RabbitMQ版本3. *使用端口15672。)
celery命令行工具收到[Errno 111] Connection refused
。
<!-- language: bash -->
$ celery list bindings
Traceback (most recent call last):
...snip...
pyrabbit.http.NetworkError: Error: <class 'socket.error'>
Python调试器显示芹菜试图连接到错误的端口:15672。这是RabbitMQ 3.0+版本的Management插件的端口。
(demo-celery-flask) $ python -m pdb ~/.virtualenvs/demo-celery-flask/bin/celery list bindings
> /home/zeb/.virtualenvs/demo-celery-flask/bin/celery(4)<module>()
-> import re
(Pdb) continue
Traceback (most recent call last):
...snip content...
NetworkError: Error: <class 'socket.error'> [Errno 111] Connection refused
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
> /home/zeb/.virtualenvs/demo-celery-flask/local/lib/python2.7/site-packages/pyrabbit/http.py(104)do_call()
-> raise NetworkError("Error: %s %s" % (type(out), out))
(Pdb) list 95,104
95 try:
96 resp, content = self.client.request(url,
97 reqtype,
98 body,
99 headers)
...snip content...
102 except Exception as out:
103 # net-related exception types from httplib2 are unpredictable.
104 -> raise NetworkError("Error: %s %s" % (type(out), out))
(Pdb) print url
'http://127.0.0.1:15672/api/bindings'
字符串&#39; 15672&#39;在kombu的代码库中显示为名为manager_port的参数的默认值。
(demo-celery-flask)~/.virtualenvs/demo-celery-flask/lib/python2.7/site-packages$ rgrep 15672 celery/*
(demo-celery-flask)~/.virtualenvs/demo-celery-flask/lib/python2.7/site-packages$ rgrep 15672 kombu/*
...snip content...
kombu/utils/amq_manager.py: port = port if port is not None else opt('manager_port', 15672)
搜索site:docs.celeryproject.org manager_port
表示它是kombu.Connection对象的一部分。 1}}和15672
都不会显示在网站搜索中。
芹菜配置documentation未提及55672
。 (Celery v3.1,2014-08-02)
RabbitMQ管理插件已启用,可通过端口55672上的rabbitmqadmin命令行访问。
答案 0 :(得分:0)
将BROKER_TRANSPORT_OPTIONS = {"manager_port": 55672}
添加到芹菜配置模块。
发现这一步涉及以下步骤:
kombu/util/amq_manager.py
文件,其中15672显示为opt('manager_port', 15672)
opt = client.transport_options.get
site:docs.celeryproject.org transport_options
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
BROKER_TRANSPORT_OPTIONS = {"manager_port": 55672}