2013-10-28 7 views
7

Ich möchte meine E-Mail-Service, dass ich schrieb, vollständig von meinem Kolben-Anwendung entkoppelt werden. Ich benutze Sellerie mit Rabbitmq. Ich frage mich also, ob ich Sellerie so konfigurieren kann, dass ich in einem Projekt die Flask-Anwendung habe, die die Nachricht an die Warteschlange (Produzent) sendet. Und in einem anderen Projekt lasse ich die Sellerie-Instanz laufen, die auf die Nachricht hört und die Aufgabe ausführt (Consumer). Ich bin immer noch verwirrt, wie die Kommunikation genau funktioniert? Setze ich die API (die die E-Mail sendet) in meine Flaschenapplikation ODER das Sellerie-Projekt? Letztendlich würde ich gerne die Flask-Anwendung und die Sellerie-Instanz in verschiedenen EC2-Instanzen haben - wobei rabbitmq als Nachrichtenvermittler fungiert.Separation Sellerie Verbraucher und Produzent

Danke für Ihre Hilfe!

Antwort

5

Sie können die Funktion send_task von Sellery verwenden, um die Aufgabe über RabbitMQ mithilfe des Aufgabennamens an den Mitarbeiter zu senden. Sie müssen noch um das Modul importieren, die Sie die Sellerie App haben:

Wenn die Aufgabe nicht im aktuellen Prozess registrieren Sie send_task() verwenden, anstatt die Aufgabe beim Namen zu nennen.

Beispiel:

from yourmodule.yourapp import celery 
celery.send_task("yourtasksmodule.yourtask", args=["Hello World"]) 
+0

ich mich gefragt, ob es möglich ist, es zu tun, ohne meinen Modul zu importieren (wie ich es in einer anderen Serverinstanz auf Putting bin die Planung). Da Sellerie auf beiden Seiten des Rohres sein muss (rabbitmq), ist meine Frage - kann ich von sellery.Task ableiten - so dass auf einer Seite Methoden stehen, die definieren, was passiert, wenn eine Aufgabe aufgerufen wird (sendet eine Nachricht)) und auf der anderen Seite die eigentlichen Aufgaben? – user2216194

+0

Egal - ich habe es zum Laufen gebracht. Danke für Ihre Hilfe! – user2216194

+0

@ user2216194 können Sie erklären, wie haben Sie es funktioniert? Ich stehe mit dem gleichen Problem fest wie du – rrawat

Verwandte Themen