Django Celery Eventlet - 出现 "No address found" 错误
Django Celery Eventlet - Getting "No address found" error
我目前正在使用 celery default prefork 进行并发,我想使用 Eventlet。
我尝试安装 Eventlet 并将其用于并发,但出现以下错误:
[2017-01-01 04:11:14,233: ERROR/MainProcess] consumer: Cannot connect to amqp://application:**@rabbit:5672//: [Errno -2] No address found.
但它与默认的 prefork 配合使用效果很好,我可以异步执行作业。
我目前使用的是 django 1.10 和 Celery 4.0.1
-------------- celery@worker v4.0.1 (latentcall)
---- **** -----
--- * *** * -- Linux-4.4.0-57-generic-x86_64-with-Ubuntu-16.04-xenial 2017-01-01 03:59:11
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: fivefrets:0x7f97ca281a58
- ** ---------- .> transport: amqp://fivefrets:**@rabbit:5672//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 10 (eventlet)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
任何人都可以帮忙,我无法通过谷歌搜索得到答案。
如果有人有任何问题,请告诉我们。
不确定我错过了什么
"No address found" 看起来像是 DNS 解析错误。如果你能解析出你的rabbitmq服务器地址,那问题可能出在Eventlet上。
如果您使用的是 Eventlet 0.20.0,看起来这可能会破坏 DNS 解析。参见:https://github.com/nameko/nameko/issues/392
如果是这样,也许您可以使用不同版本的 eventlet,例如 pip install --upgrade eventlet==0.19.0
或 pip install --upgrade eventlet==0.20.1
。
如果您使用 eventlet==0.20.0
遇到该错误,则表示您的配置格式不正确。 /etc/resolv.conf
与 search domain
但您发布的是相对主机名 rabbit
,正确的 DNS 解析必须仅尝试 rabbit.domain
查询域名服务器。
正确的解决方案选项:
- 将
.local
域引入您的网络,将 resolv.conf、DNS 记录和应用程序配置更改为 rabbit.local
。综合考虑,这是最好的方法。
- 从
/etc/resolv.conf
中删除 search
行
- 在应用程序配置中向单级主机名添加尾随点
rabbit.
- 这使得完全限定的主机名始终能够正确解析
对于不太完美的方式,升级 eventlet>=0.20.1
它包含尝试顶级查询的补丁,就好像它们是完全合格的(在这种情况下 rabbit.
)
我目前正在使用 celery default prefork 进行并发,我想使用 Eventlet。
我尝试安装 Eventlet 并将其用于并发,但出现以下错误:
[2017-01-01 04:11:14,233: ERROR/MainProcess] consumer: Cannot connect to amqp://application:**@rabbit:5672//: [Errno -2] No address found.
但它与默认的 prefork 配合使用效果很好,我可以异步执行作业。
我目前使用的是 django 1.10 和 Celery 4.0.1
-------------- celery@worker v4.0.1 (latentcall)
---- **** -----
--- * *** * -- Linux-4.4.0-57-generic-x86_64-with-Ubuntu-16.04-xenial 2017-01-01 03:59:11
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: fivefrets:0x7f97ca281a58
- ** ---------- .> transport: amqp://fivefrets:**@rabbit:5672//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 10 (eventlet)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
任何人都可以帮忙,我无法通过谷歌搜索得到答案。
如果有人有任何问题,请告诉我们。
不确定我错过了什么
"No address found" 看起来像是 DNS 解析错误。如果你能解析出你的rabbitmq服务器地址,那问题可能出在Eventlet上。
如果您使用的是 Eventlet 0.20.0,看起来这可能会破坏 DNS 解析。参见:https://github.com/nameko/nameko/issues/392
如果是这样,也许您可以使用不同版本的 eventlet,例如 pip install --upgrade eventlet==0.19.0
或 pip install --upgrade eventlet==0.20.1
。
如果您使用 eventlet==0.20.0
遇到该错误,则表示您的配置格式不正确。 /etc/resolv.conf
与 search domain
但您发布的是相对主机名 rabbit
,正确的 DNS 解析必须仅尝试 rabbit.domain
查询域名服务器。
正确的解决方案选项:
- 将
.local
域引入您的网络,将 resolv.conf、DNS 记录和应用程序配置更改为rabbit.local
。综合考虑,这是最好的方法。 - 从
/etc/resolv.conf
中删除 - 在应用程序配置中向单级主机名添加尾随点
rabbit.
- 这使得完全限定的主机名始终能够正确解析
search
行
对于不太完美的方式,升级 eventlet>=0.20.1
它包含尝试顶级查询的补丁,就好像它们是完全合格的(在这种情况下 rabbit.
)