Django Celery Eventlet – получение ошибки «Не найден адрес»

В настоящее время я использую префорк сельдерея по умолчанию для параллелизма и хочу использовать Eventlet.

Я попытался установить Eventlet и использовал его для параллелизма, но получаю следующую ошибку:

[2017-01-01 04:11:14,233: ERROR/MainProcess] consumer: Cannot connect to amqp://application:**@rabbit:5672//: [Errno -2] No address found.

Но он хорошо работает с предфорком по умолчанию, и я могу выполнять задания асинхронно.

В настоящее время я использую 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

Помогите пожалуйста, не могу найти ответы в гугле.

Пожалуйста, нам меня знать, если у кого-то есть какие-либо вопросы.

Не уверен, что мне не хватает


person Vinod Ronold    schedule 01.01.2017    source источник


Ответы (2)


«Адрес не найден» выглядит как ошибка с разрешением 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.

person Frank T    schedule 01.01.2017
comment
Спасибо..! разрешение в github.com/nameko/nameko/issues/392 pip install -U github.com/eventlet/eventlet/archive/ - person Vinod Ronold; 01.01.2017
comment
это сработало. спасибо, что указали мне на правильную проблему github.com/nameko/nameko/issues/392 - person Vinod Ronold; 01.01.2017
comment
Пожалуйста, измените его на eventlet==0.20.1 - person temoto; 03.01.2017

Если вы столкнулись с этой ошибкой с eventlet==0.20.0, это означает, что у вас неверная конфигурация. /etc/resolv.conf с search domain, но вы выдаете относительное имя хоста rabbit, для которого правильное разрешение DNS должно выполнять только rabbit.domain запросы к серверам имен.

Варианты правильного решения:

  • введите домен .local в свою сеть, измените resolv.conf, записи DNS и конфиги приложений на rabbit.local. Учитывая все обстоятельства, это лучший способ.
  • удалить search строку из /etc/resolv.conf
  • добавить конечную точку к одноуровневым именам хостов в конфигурациях приложений rabbit. - это делает полное имя хоста, которое всегда разрешается правильно

Для менее совершенного способа обновите eventlet>=0.20.1, он содержит патч, который пытается выполнять запросы верхнего уровня, как если бы они были полностью квалифицированными (в данном случае rabbit.)

person temoto    schedule 03.01.2017