0 Frage: Nachricht kann nicht mit Sellerie gesendet werden

Frage erstellt am Wed, May 8, 2019 12:00 AM

Ich versuche, Selleries Build zur Unterstützung des Broadcast-Routings mit Broadcast und rabbitmq als Broker zu verwenden. Ich konnte erfolgreich Nachrichten mit dem standardmäßigen direkten Austausch veröffentlichen und empfangen. Jetzt versuche ich, den Fanout-Austausch zu verwenden, den rabbitmq bereitstellt. Aus diesem Grund scheint Sellerie eine integrierte Unterstützung für die Broadcast-Klasse zu haben.

Mein Sellerie-Conf sieht folgendermaßen aus:

app.conf.task_queues = (Broadcast('broadcast_tasks'),)

app.conf.task_routes = {
  'tasks.tasks.sync_channels': {
      'queue': 'broadcast_tasks',
      'exchange': 'broadcast_tasks'
  }
}

Im Folgenden wird beschrieben, wie ich meine Aufgabe in app /tasks /tasks.py definiert habe.

@app.task(name='sync_channels')
def sync_channels(data):
   logger.debug('Received here')
   pass

So leite ich die Nachricht mit Sellerie an rabbitmq weiter:

from app.tasks.tasks import sync_channels
sync_channels.delay([])

Wenn ich die Benutzeroberfläche von rabbitmq management öffne, kann ich sehen, dass ein Fanout-Austausch mit dem Namen "broadcast_tasks" erstellt wird. Wenn ich jedoch versuche, eine Nachricht an die Aufgabe sync_channels zu senden, wird automatisch ein (direkter) Standardaustausch und ein Standard erstellt Die an die Standardvermittlung gebundene Warteschlange und alle meine zukünftigen Nachrichten an die Task "sync_channels" werden an die Standardvermittlung weitergeleitet. Anscheinend kann ich die von Sellerie bereitgestellte Broadcast-Funktion nicht konfigurieren.

Nachfolgend finden Sie einige Screenshots, die Ihnen beim Verständnis des Problems helfen können:

 Rabbitmq-Verwaltungsseite, wenn keine Verbindung zum Sellerie besteht Ein neuer Fanout-Austausch mit dem Namen broadcast_tasks wird erstellt, wenn ich Sellerie-Arbeiter starte Eine von Sellerie erstellte Warteschlange, die an den Austausch

Ich muss auch verstehen, wie der Broadcast von Sellerie funktioniert. Anstatt die Broadcast-Funktion zu verwenden, habe ich versucht, einen Fanout-Austausch zu erstellen, aber ich hatte Mühe, eine Warteschlange an diesen Austausch zu binden und die Nachricht dann zu veröffentlichen. Jede Hilfe oder ein Beispiel dafür ist für mich hilfreich.

Vielen Dank im Voraus

    
0
0 Antworten                              0                         
Quelle platziert Hier