Wann der direkte Austausch über den Fanout-Austausch verwendet werden soll

9

Soweit ich das beurteilen kann, gibt es keinen richtigen Benutzerfall für einen direkten Austausch, da alles, was Sie damit tun können, Sie mit einem Fanout-Austausch tun können, nur erweiterbarer.

Genauer gesagt beziehen sich die Autoren beim Lesen von RabbitMQ in Action auf den Anwendungsfall, der etwa so aussieht: "Wenn ein Nutzer ein Bild hochlädt, muss er ein Thumbnail erstellen sagt Ihnen, dass Sie Punkte für das Hochladen eines Fotos vergeben müssen. Mit RabbitMQ müssen Sie nur eine neue Warteschlange erstellen und auf der Herstellerseite nicht arbeiten! "

Aber das ist nur wahr, wenn Sie vorausschauend einen Fanout-Austausch auf Herstellerseite schaffen. Nach meinem Verständnis kann ein direkter Austausch dies nicht erreichen und ist nur dann sinnvoll, wenn Sie tatsächlich eine enge Kopplung zwischen Austausch und Warteschlange wünschen (was Sie nicht tun, weil dies der Punkt der Nachrichtensysteme ist).

Stimmt das oder gibt es einen tatsächlichen Anwendungsfall?

    
djechlin 26.02.2013, 23:41
quelle

3 Antworten

5

Verglichen mit dem Fanout-Austausch ermöglicht der direkte Austausch eine Filterung basierend auf dem Routing-Schlüssel der Nachricht, um zu bestimmen, welche Warteschlange (n) die Nachricht empfängt / empfangen. Bei einem Fanout-Austausch gibt es keine solche Filterung, und alle Nachrichten werden an alle gebundenen Warteschlangen gesendet.

Wenn Sie also einen direkten Austausch mit mehreren Warteschlangen haben, die mit der gleichen Routing-Warteschlange verbunden sind, und alle Nachrichten diesen Schlüssel haben, haben Sie dasselbe Verhalten wie der Fanout-Austausch. Dies wird in Tutorial 4 auf der RabbitMQ-Website besser erklärt.

Im Anwendungsfall "Bild hochladen" können Sie Folgendes verwenden:

  • ein Fanout-Austausch mit zwei Warteschlangen (eine für den Thumbnail-Arbeiter, eine für den Score-Berechnungsarbeiter). Der Routing-Schlüssel wird ignoriert.

    %Vor%
  • ein direkter Austausch mit zwei Warteschlangen. Warteschlangen werden zum Beispiel mit dem Schlüssel image-processing gebunden, und Nachrichten mit diesem Schlüssel werden in beide Warteschlangen eingereiht.

    %Vor%

    Wenn in dieser Situation der Routingschlüssel der Nachricht nicht mit dem Bindungsschlüssel übereinstimmt, empfängt keine der Warteschlangen die Nachricht.

Sie können die beiden Worker nicht in die gleiche Warteschlange stellen, da die Nachrichten zwischen ihnen ausgeglichen werden. Ein Mitarbeiter wird die Hälfte der Nachrichten sehen.

    
Jean-Sébastien Pédron 24.03.2016 10:41
quelle
0

Meinst du einen Fanout-Austausch oder einen Themenaustausch? Ein Fanout-Austausch unterscheidet sich sehr von einem direkten Austausch. Ich gehe davon aus, dass das Senden des Fotos an die Vermittlungsstelle mit einem Routing-Schlüssel gesendet wird, der angibt, dass ein Foto vorhanden ist. In diesem Fall haben Sie einen Consumer, der das Thumbnail erzeugt, und wenn Sie einen neuen Consumer hinzufügen möchten, können Sie ihn einfach hinzufügen und die gleiche Nachricht erhalten, aber etwas anderes machen, zB Punkte vergeben.

Der Anwendungsfall bleibt bestehen. Ich denke, der Punkt ist, dass der Austausch ursprünglich als direkter Austausch geschaffen wurde.

    
robthewolf 27.02.2013 07:40
quelle
0

Diese Antwort gibt die vorherige wieder und wenn Sie auf diese Seite verweisen, glaube ich, dass Sie das tun werden Ein besonderer Anwendungsfall ist:

  

Der direkte Austausch wird häufig verwendet, um Aufgaben zwischen mehreren zu verteilen   Arbeiter (Instanzen der gleichen Anwendung) in einer Round-Robin-Art.

    
DavidS 12.08.2013 11:02
quelle

Tags und Links