2016-04-13 6 views
0

Ich habe eine Anwendung und mehrere Instanzen davon läuft auf verschiedenen Servern. Ein Server veröffentlicht eine Nachricht zu einem Thema. Mehrere Warteschlangen erhalten die Nachricht, und sobald sie verarbeitet wurde, wird die Antwort in eine andere Warteschlange gestellt.Die Antwort zurück von der Warteschlange auf den gleichen Server bekommen, der die Anfrage gemacht

Alle Instanzen der auslösenden Anwendung sind für diese Warteschlange abonniert. Wie kann ich sicherstellen, dass die gleiche Anwendungsinstanz, die diese Anfrage gestellt hat, die Antwort von der Warteschlange erhält.

Zur Zeit von den mehreren Instanzen, zufällige nimmt ab. Aber ich möchte es bei der Instanz bekommen, wo es entstanden ist.

+0

Nur neugierig. Wenn Sie möchten, dass der Herausgeber die Nachricht verarbeitet, d. H. Die sendende Instanz muss die Nachricht auch verarbeiten, warum möchten Sie sie dann an erster Stelle einreihen? – Madhusudhan

+0

Hier muss die sendende Instanz diese Antwort an die Benutzeroberfläche zurückgeben. dh eine Anfrage kommt von der Benutzeroberfläche über die REST-API zu einer Instanz, sie stellt die Nachricht in eine Warteschlange und sobald die Anfrage verarbeitet ist, befindet sie sich in einer Warteschlange, in der alle Instanzen der anfordernden Anwendung zuhören. Wenn ich es auf der initiierenden Instanz bekomme, kann nur ich es auf die Benutzeroberfläche zurückgeben. –

Antwort

1

Verwenden Sie die JMS-Eigenschaften zum Identifizieren der Quelle der ursprünglichen Nachricht, lassen Sie die Antwort die gleiche Eigenschaft enthalten, und lassen Sie die ursprünglichen Hersteller die Nachrichtenauswahl verwenden, um nur die entsprechenden Nachrichten abzurufen. Ich habe diese Technik mehrmals verwendet, und es ist sehr effizient (obwohl wahrscheinlich andere Anbieter unterschiedliche Overhead haben).

Lassen Sie Selektoren Ihr Freund sein.

+0

Ich übergebe den Instance Identifier in JMSCorelationId und komme zurück zur letzten Queue. Ich könnte Selektoren mit JMS anwenden. Jetzt benutze ich Camel und spezifiziere den Endpunkt uri dazu. Wie kann ich den Selektor für JMScorelationIS im Endpunkt uri als Parameter angeben? –

+0

Ich denke, dies wird den Selektor-Job tun: selector = JMSCorrelationID% 3D'Server01 ' –

Verwandte Themen