2016-06-03 7 views
0

Ich habe zwei Python-Projekte. Beide sind mit Sellerie befähigt. Was ich hier versuche ist von Projekt A Ich sende Aufgabe mit send_task() Methode. Die Aufgabe, die ich sende, befindet sich in Projekt B. Der Mitarbeiter von Projekt B ist also aktiv und zeigt die Aufgabe an. Bis zu diesem Zustand funktioniert alles gut. Aber wenn ich den Arbeiter von Projekt A aufsteige, beginnt er, hier einen Schlüsselfehler zu liefern. Was genau hier passiert ist, dass 1) Im ersten Versuch von send_task() Projekt B Arbeiter erhält die Aufgabe. Und alles funktioniert wie erwartet. 2) Im zweiten Versuch von send_task() schlägt es fehl. Da der Mitarbeiter von Projekt A versucht, die Aufgabe zu erhalten, die in Projekt A nicht vorhanden ist, wird der Schlüsselfehler ausgegeben. 3) Im dritten Versuch von send_task() erhält der Arbeiter von Projekt B die Aufgabe. Und alles funktioniert wie erwartet. 4) Im vierten Versuch von send_task() schlägt es fehl. Da der Mitarbeiter von Projekt A versucht, die Aufgabe zu erhalten, die in Projekt A nicht vorhanden ist, wird der Schlüsselfehler ausgegeben. Dieser Prozess wiederholt sich immer wieder.in Sellerie Rabbitmq Austauschart Thema funktioniert nicht richtig

Projekt A Queue: -

   .> mplogin.sync  exchange=mplogin(topic) key=mplogin.sync 


[tasks] 


[2016-06-03 11:11:04,427: INFO/MainProcess] Connected to amqp://guest:**@localhost:5672// 
[2016-06-03 11:11:04,468: INFO/MainProcess] mingle: searching for neighbors 
[2016-06-03 11:11:05,476: INFO/MainProcess] mingle: all alone 
[2016-06-03 11:11:05,984: WARNING/MainProcess] [email protected] ready. 

Projekt B Queue: -

   .> mplogin.sync  exchange=mplogin(topic) key=mplogin.sync 


[tasks] 
    . mplogin.sync.register 

[2016-06-03 11:12:57,941: INFO/MainProcess] Connected to amqp://guest:**@localhost:5672// 
[2016-06-03 11:12:57,949: INFO/MainProcess] mingle: searching for neighbors 
[2016-06-03 11:12:58,955: INFO/MainProcess] mingle: all alone 
[2016-06-03 11:12:58,980: WARNING/MainProcess] /usr/local/lib/python2.7/dist-packages/kombu/pidbox.py:75: UserWarning: A node named [email protected] is already using this process mailbox! 

Maybe you forgot to shutdown the other node or did not do so properly? 
Or if you meant to start multiple nodes on the same host please make sure 
you give each node a unique node name! 

    warnings.warn(W_PIDBOX_IN_USE.format(node=self)) 
[2016-06-03 11:12:58,983: WARNING/MainProcess] [email protected] ready. 

Ich mache beiden Arbeiter auf mit

celery -A tasks worker -l info 

Aufgabe im Projekt B: -

@sync_app.task(name='mplogin.sync.register') 
def register(user_obj): 
    return "Its working!!!!" 

aus Projekt A Senden Aufgabe:

from tasks import login_async_app 

    abc = login_async_app.send_task('mplogin.sync.register',kwargs={'user_obj': 500}) 

sync_app ist Sellerie Anwendung in Projekt B & login_async_app Sellerie Anwendung in Projekt A. ist

Ich denke, das Problem, das ich bin vor ist wegen exchange_type = "Thema " Ich habe versucht, direkt zu verwenden, aber es funktioniert nicht. bitte führen Sie mich durch.

Antwort

0

Beide Arbeiter verbrauchen Aufgaben aus derselben Warteschlange.

Wenn Sie Arbeitskraft A gestartet haben, wurden keine Aufgaben erkannt (wie aus dem Protokoll ersichtlich).

[tasks] 

Arbeiter B hat nur 1 Aufgabe erkannt.

[tasks] 
    . mplogin.sync.register 

Sie müssen sicherstellen, dass beide Arbeiter beide Aufgaben erkennen. Sie können dies tun, indem Sie Sellerie richtig konfigurieren.

Sie können auch CELERY_IMPORTS verwenden, um die Liste der Module zu erwähnen, die Sellerie importiert.

CELERY_IMPORTS = ('foo.bar.app1.task1', 'foo.bar.app2.task2') 

Durch das ordnungsgemäße Importieren von Aufgaben können Sie diesen Fehler vermeiden.