Freitag, Juni 5, 2020

Sellerie und benutzerdefinierte Verbraucher

Meines Wissens Sellerie wirkt sowohl als Produzent und konsument von Nachrichten. Dies ist nicht das, was ich erreichen will. Ich will Sellerie zu handeln, wie der Verbraucher ist, nur, um Feuer zu bestimmten Aufgaben auf der Grundlage von Nachrichten, die ich sende, um meine AMQP broker der Wahl. Ist das möglich?

Oder muss ich die Suppe durch hinzufügen von Möhre auf meinen Stapel?

  • Suppe und Karotten? könnten Sie ein Beispiel geben?
InformationsquelleAutor James Ford | 2013-07-05

3 Kommentare

  1. 6

    Sellerie-Broker fungiert als eine Nachricht speichert, und veröffentlichen Sie Sie auf einen oder mehrere Arbeitnehmer, die ein Abonnement für diejenigen,

    also: Sellerie pulishes Nachrichten an einen broker (rabbitmq, redist, Sellerie selbst durch django. db, usw..) diese Nachrichten werden abgerufen, indem ein Arbeiter nach dem Protokoll der broker, das merkt Sie (in der Regel, Sie sind hartnäckig, aber vielleicht ist es dependes auf Ihrem broker), und hat ausgeführt, indem Sie die Arbeitnehmer.

    Aufgabe, die Ergebnisse sind auf die Ausführung worker-Aufgabe ist, und Sie können konfigurieren, wo speichern Sie diese Ergebnisse und Sie können Sie abrufen mit diese Methode .

    Können Sie Sie veröffentlichen, Aufgaben mit Sellerie übergabe von Parametern an Ihre „receiver function“ (die Aufgabe, die Sie definieren, die Dokumentation hat einige Beispiele, in der Regel Sie nicht wollen, zu passieren große Dinge hier (sagen wir ein queryset), sondern nur die minimale Informationen, ermöglicht Ihnen das abrufen, was Sie benötigen, wenn Sie die Ausführung der Aufgabe.

    einem einfachen Beispiel könnte sein:

    Registrieren Sie einen task

    @task
    def add(x,x):
        return x+y

    und rufen Sie die von einem anderen Modul mit:

    from mytasks import add
    
    metadata1 = 1
    metadata2 = 2
    myasyncresult = add.delay(1,2)
    myasyncresult.get() == 3

    BEARBEITEN

    nach deinem edit, sah ich, dass Sie wahrscheinlich wollen, zu konstruieren, die Nachrichten von anderen Quellen andere, Sellerie, konnte man sehen, hier das format der Nachricht, die Sie standardmäßig als eingelegte Objekte, die Achtung, die format, so dass Sie post die Nachricht in die richtige Warteschlange Ihres rabbitmq-broker haben Sie Recht-gehen, abrufen, Sie von Ihrem Arbeitnehmer.

    • Sicher, aber kann ich starten, Sellerie Arbeitnehmer von Warteschlangen-Nachrichten von einem anderen app? In anderen Worten: Kann Sellerie abonnieren Sie einen broker und bestimmte Aufgaben auf der Grundlage der Nachrichten aus der Warteschlange entfernt?
    • wenn die Skalierung horizontal ist Ihre Sorge, ja das ist machbar für Sie sicher! Sie müssen nur drücken Sie den Staat zu einem gemeinsamen backend der db (zum Beispiel für das abrufen Ihrer Modelle?) oder funktionieren nur auf übergebenen Daten.
    • Vielen Dank für deine Bearbeitung. Das format der Nachricht ist so ziemlich das, was ich Suche, da Sellerie ‚automatisch‘ wird sich um Sie kümmern und abonnieren Sie eine Warteschlange?
    • ja, Lesen Sie über die queue-Namen hier
  2. 1

    Sellerie verwendet die message-broker-Architektur-Muster. Eine Anzahl von Implementierungen /broker-Transporte verwendet werden können, mit Sellerie, einschließlich RabbitMQ und ein Django-Datenbank.

    Vom Wikipedia:

    Einen message broker ist ein Architektur-Muster für Meldung der Validierung, message transformation und routing von Nachrichten. Es vermittelt die Kommunikation zwischen Anwendungen, die Minimierung der gegenseitigen Kenntnis, dass die Anwendungen sollten auf der jeweils anderen, um in der Lage sein, Nachrichten auszutauschen, eine wirksame Umsetzung der Entkopplung.

    Halten Ergebnisse ist optional und erfordert eine Ergebnis-backend. Sie können verschiedene broker und Ergebnis-backends. Die Sellerie-Erste Schritte guide enthält weitere Informationen.

    Die Antwort auf Ihre Frage ist ja feuern können Sie bestimmte Aufgaben übergeben von Argumenten ohne addding Karotte in den mix.

    • Ok, scheint vielversprechend. So kann ich eine externe app, die auf einer anderen Umgebung zu Warteschlange eine Nachricht zu RabbitMQ ist verbraucht den Sellerie, die sagt, Sellerie aufrufen Aufgabe X?
    • Wenn die andere Umgebung mit Python, dann ist es unkompliziert und im basic-Dokumentation und Beispiele. Wenn Sie eine andere Sprache, die Sie könnten Blick auf die HTTP Callback-Aufgaben (Webhooks).
    • Ja. Aber die Sache ist, dass ich nicht wollen, verwenden Sie die Webhooks. So wie ich das verstehe Sellerie ist sowohl der Verbraucher und Produzent der Nachrichten. Ich möchten, verwenden Sie Sellerie, wie der Verbraucher ist, nur, einen externen Produzenten, dass die Warteschlangen aufgrund von Aufgaben an Sellerie.
    • Ich weiß nicht, wie es leicht es wäre drop richtig formatiert Sellerie Nachrichten auf der task-queue direkt (ohne Verwendung der Sellerie-Bibliothek). Könnten Sie AMQP direkt mit einem framework wie Kombu und die Entsprechung in Ihrem producer ‚ s Sprache. Sie wären verantwortlich für das routing/das Abonnement von Nachrichten, obwohl.

Kostenlose Online-Tests