Ich habe drei Clients mit jeweils eigenen RabbitMQ-Instanzen und ich habe eine Anwendung (nennen wir sie appA), die eine eigene RabbitMQ-Instanz hat, die drei Client-Anwendungen (app1, app2, app3) einen Dienst nutzen wollen AppA.
Der Dienst in AppA erfordert RPC-Kommunikation, app1, app2 und app3 haben jeweils eine Reservierungswarteschlange und eine Reservierungswarteschlange.
Mit dem Shovel-Plugin kann ich alle booking.request-Nachrichten von app1-3 an appA weiterleiten:
%Vor%Jetzt AppA wird auf die Anfrage in der Warteschlange booking.response reagieren, ich brauche die Buchungsantwort Nachricht auf RabbitMQ-appA zurück zu der richtigen booking.response Warteschlange entweder auf app1, app2 oder app3, aber nicht auf alle sie - wie richte ich eine schaufel- / föderierte queue auf der rabbitMQ-appA ein, die die antwort an die korrekte rabbitMQ (app1, app2, app3) weiterleitet, die eine antwort in ihrer eigenen booking.response queue erwartet?
Alle diese Apps verwenden spring-amqp (falls relevant) Alternativ könnte ich im Frühjahr eine rabbitMQ-Vorlage einrichten, die mehrere rabbitMQ-Warteschlangen abfragt und von jedem einzelnen abfragt.
Aus der Dokumentation sieht das so aus, wie ein typischer Verbraucher aussieht:
%Vor%Ist es möglich, mehrere Verbindungsfactorys zu spezifizieren, um dies zu tun, selbst wenn die Verbindungsfabriken zu derselben RabbitMQ-Instanz gehören, sondern nur verschiedene vhosts:
Aktualisieren :
Basierend auf Joshs Antwort hätte ich mehrere Verbindungsfabriken:
%Vor%Dann würde ich die SimpleRoutingConnectionFactory verwenden, um beide Verbindungsfactorys zu umbrechen:
%Vor%Wenn ich meine rabbitMQ-Vorlage deklariere, würde ich sie stattdessen auf die SimpleRoutingConnectionFactory anstatt auf die einzelnen Connection Factories verweisen:
%Vor%... und dann benutze die Vorlage so, wie ich sie normalerweise benutzen würde ...
%Vor%// und Nachrichten werden von beiden rabbitMQ-Instanzen verwendet
... und ...
%Vor%// und die Nachricht wird in beiden Warteschlangen veröffentlicht
Habe ich Recht?
Sehen Sie sich org.springframework.amqp.rabbit.connection.AbstractRoutingConnectionFactory an. Es ermöglicht Ihnen, mehrere Verbindungsfabriken zu verschiedenen vhosts oder verschiedenen rabbitmq-Instanzen zu erstellen. Wir verwenden es für eine Multi-Tenant-Rabbitmq-Anwendung.
Es ist eine Weile her, aber wenn Sie Spring verwenden, können Sie so viele Verbindungsfactories erstellen, wie Sie möchten, mit ihren eigenen Konfigurationen (host, user / pass, vhost, etc.), genau wie Sie es getan haben:
> %Vor%Und dein Kaninchen Admin / Vorlage ist wie du gehst:
%Vor% Beachten Sie, dass Sie das @Primary
-Tag angeben müssen, um eine Haupt-Bean zu aktivieren, sobald Spring nicht weiß, welches zu wählen ist, wenn Sie name
nicht explizit angeben.
Mit diesen Händen injizieren Sie sie einfach normal entlang Ihrer Komponenten:
%Vor%Hoffe es hilft! :)
Tags und Links rabbitmq spring-amqp federation rabbitmq-shovel