RabbitMQ - Platzhalter in Routing-Schlüssel vs Binding-Schlüssel

7

Ich benutze rabbitmq, um Nachrichten von einem einzelnen Server an mehrere Clients zu senden. Ich möchte eine Nachricht an alle Kunden senden, also habe ich einen Austausch erstellt, an den sie alle binden. Das funktioniert großartig. Was passiert jedoch, wenn ich eine Nachricht an eine Handvoll dieser Clients senden möchte, die auf einem Platzhalter im Routing-Schlüssel (nicht dem Bindungsschlüssel) basiert. Ich habe zum Beispiel rote Kunden, blaue Kunden und grüne Kunden. Manchmal möchte ich, dass alle Clients die Nachricht erhalten, manchmal möchte ich nur das Blau oder nur das Blau und das Rot. Dies ist ein vereinfachtes Beispiel. Um dies auf mein aktuelles System auszudehnen, stellen Sie sich vor, dass ich Hunderte von "Farb" -Differenzen habe. Ich kann nicht herausfinden, wie dies zu tun ist, da Platzhalter nur in verbindlichen Schlüsseln zu existieren scheinen, die keine Schlüssel sind.

Jeder Rat wird sehr geschätzt.

    
user3334234 20.03.2014, 22:52
quelle

1 Antwort

18

Ich denke, Sie versuchen, mit einer Schlange zu viel zu machen. In Anbetracht dessen, dass Sie im Voraus wissen, ob die Nachricht an alle Kunden oder nur an eine Person gesendet wird, sollten Sie zwei Austauschvorgänge einrichten. Eines als Thema oder direkt, wobei die Clients nur die Nachrichten erhalten, die speziell für sie bestimmt sind, das andere als Fanout-Austausch, der an eine andere Gruppe von Warteschlangen verteilt wird, die von allen Clients gelesen werden. Header-Exchanges können Ihnen die Flexibilität geben, die Sie auch wollen, und die andere Möglichkeit ist, einen benutzerdefinierten Austausch zu schreiben, um genau das zu tun, was Sie brauchen.

    
robthewolf 23.03.2014, 09:46
quelle

Tags und Links