2016-10-05 5 views
0

Ich habe zwei Anwendungsserver (beide mit der Django-Anwendung). Beide haben Sellerie Arbeiter laufen. RabbitMQ Server ist auf einem dritten anderen Server eingerichtet.Sellerie - [Errno 111] Verbindung abgelehnt, wenn Sellerie Aufgabe mit Verzögerung ausgelöst wird()

Wenn eine der Testaufgaben von einem der beiden Anwendungsserver über die Shell unter Verwendung von delay() ausgeführt wird, werden sie ordnungsgemäß ausgeführt.

Wenn dieselbe Aufgabe von Server1 vom Browser ausgelöst wird (durch Ajax), funktioniert es wieder gut.

Aber im Falle von server2 (mit der gleichen Konfiguration und Code wie server1), wenn die gleiche Aufgabe vom Browser ausgelöst wird gibt es [Error 111] Verbindung verweigert Fehler.

Einige der installierten Pakete auf server1 oder server2 sind:

celery 3.1.18 
amqp 1.4.9 
django 1.8.5 

Kann jemand mir mit diesem helfen? Vielen Dank!

Die Fehler Spur ist wie folgt:

 
File "../lib/python2.7/site-packages/celery/app/task.py" in delay 
    453.   return self.apply_async(args, kwargs) 
File "../lib/python2.7/site-packages/celery/app/task.py" in apply_async 
    559.    **dict(self._get_exec_options(), **options) 
File "../lib/python2.7/site-packages/celery/app/base.py" in send_task 
    353.     reply_to=reply_to or self.oid, **options 
File "../lib/python2.7/site-packages/celery/app/amqp.py" in publish_task 
    305.    **kwargs 
File "../lib/python2.7/site-packages/kombu/messaging.py" in publish 
    172.      routing_key, mandatory, immediate, exchange, declare) 
File "../lib/python2.7/site-packages/kombu/connection.py" in _ensured 
    457.           interval_max) 
File "../lib/python2.7/site-packages/kombu/connection.py" in ensure_connection 
    369.       interval_start, interval_step, interval_max, callback) 
File "../lib/python2.7/site-packages/kombu/utils/__init__.py" in retry_over_time 
    246.    return fun(*args, **kwargs) 
File "../local/lib/python2.7/site-packages/kombu/connection.py" in connect 
    237.   return self.connection 
File "../lib/python2.7/site-packages/kombu/connection.py" in connection 
    742.     self._connection = self._establish_connection() 
File "../lib/python2.7/site-packages/kombu/connection.py" in _establish_connection 
    697.   conn = self.transport.establish_connection() 
File "../lib/python2.7/site-packages/kombu/transport/pyamqp.py" in establish_connection 
    116.   conn = self.Connection(**opts) 
File "../lib/python2.7/site-packages/amqp/connection.py" in __init__ 
    165.   self.transport = self.Transport(host, connect_timeout, ssl) 
File "../lib/python2.7/site-packages/amqp/connection.py" in Transport 
    186.   return create_transport(host, connect_timeout, ssl) 
File "../lib/python2.7/site-packages/amqp/transport.py" in create_transport 
    299.   return TCPTransport(host, connect_timeout) 
File "../lib/python2.7/site-packages/amqp/transport.py" in __init__ 
    95.    raise socket.error(last_err) 
+0

Dein rabbitmq läuft nicht oder ist nicht erreichbar –

+0

Kein rabbitmq läuft gut. Ansonsten wäre die Aufgabe über die Python-Shell nicht ausgeführt worden. – ndk

+0

Es sieht so aus, als würde etwas eine Netzwerkverbindung von server2 zum rabbitmq-Dienst verhindern - Sie sollten versuchen, grundlegende Netzwerkdiagnose-Tools zu verwenden, um herauszufinden, was vor sich geht. Für einen sehr einfachen Versuch, z.B. 'telnet' von Server 2 an den rabbitmq-Host an Port 5672 – scytale

Antwort

0

ich Anfang Hinzufügen einige zusätzliche Protokollierung Anrufe sagen würde, bevor Verzögerung auf server2 nur anrufen, um sicherzustellen, dass Ihre Sellerie Config korrekt ist, wenn es als ein Webserver läuft (wie im Gegensatz zur Shell-Instanz manage.py). Es klingt wie ein Startskript für gunicorn/uwsgi/apache/magic lädt nicht irgendeine Variable, die benötigt wird, um den Sellerie korrekt zu konfigurieren. Oder es wird einfach irgendwie in diesem Kontext außer Kraft gesetzt.

Wirklich schreckliche Methode ist Ihren Webserver auf Server2 als manage.py Runserver laufen und legen Sie eine PDB dort direkt vor Ihrem Anruf an .delay() und stochern. Nicht genau etwas, das du im allgemeinen Internet öffnen willst, während du das tust, aber wenn alles andere fehlschlägt ...

Verwandte Themen