RabbitMQ RPC über mehrere rabbitMQ-Instanzen hinweg

8

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?

    
Jan Vladimir Mostert 14.02.2015, 22:00
quelle

2 Antworten

5

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.

    
Josh Chappelle 20.02.2015, 21:31
quelle
1

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! :)

    
bosco 27.12.2016 11:53
quelle