2016-07-02 28 views
0

Ich schaue mir ein Design mit ca. 100 Themen an. Das Erstellen von Sitzungen, Themen, Nachrichtenkonsumenten und das Verbinden des Nachrichtenhörers mit dem Benutzer scheint eine Menge Ressourcen zu verbrauchen. Gibt es einen besseren Weg? Kann ich beispielsweise meine Sitzung erneut verwenden oder muss sie jedes Mal neu erstellt werden? Oder sollte ich ein anderes Paradigma verwenden?Gibt es eine effizientere Möglichkeit, eine große Liste von Nachrichtenkonsumenten für JMS zu erstellen?

Hier ist die Logik, die mindestens hundertmal aufgerufen wird:

 session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
     final Topic destination = session.createTopic(topicName); 
     final MessageConsumer consumer = session.createConsumer(destination, selector); 
     consumer.setMessageListener(listener); 

Antwort

1

JMS-Sitzungen sind nicht Thread-sicher, so dass Sie einen neuen für jedes Abonnement erstellen müssen. Einige JMS-Implementierungen wie ActiveMQ unterstützen virtuelle Themen, bei denen ein Abonnement für mehrere Themen initiiert werden kann. Dies würde wahrscheinlich Ihr Problem lösen. Siehe http://activemq.apache.org/virtual-destinations.html.

0

Für dieselbe Warteschlange und dieselbe Consumer-Sitzung kann und sollte wiederverwendet werden. Sie haben also maximal 100 Sitzungen.

Eine andere Lösung kann einige Brücken mit Selektoren auf dem JMS-Server beinhalten. Sie können Ihren JMS so konfigurieren, dass er 100 Themen an eine oder mehrere Warteschlangen weiterleitet und dann von dieser Warteschlange aus konsumiert. Es kann jedoch schwierig sein, dies zu implementieren, wenn sich Ihre Nachrichtentypen in diesen Themen unterscheiden.

Hoffe, dass hilft