2009-06-04 6 views
6

Ich bin neu in JMS und arbeite an der Einrichtung von ActiveMQ mit Tomcat 6 und Spring. Ich habe die meisten der grundlegenden Dinge konfiguriert, aber ich bin ein wenig verwirrt mit den Message Listener Containern, die Frühling bietet. Beim Lesen der Dokumentation hört es sich an, als würde der Message Listener Container "Abonnieren" (ich arbeite mit Topics) "abwickeln", sich abmelden und die Nachricht an den Listener übermitteln. Ich bin mir nicht sicher, ob ich richtig darüber nachdenke. Wenn dies der Fall ist, sehe ich keine Dokumentation darüber, wie ich mehrere Klassen mit dem Message Listener Container zum selben Thema abonnieren würde. Ich sehe, dass Sie die Eigenschaft messageListener festlegen können, aber das würde nur einer Klasse ermöglichen, ein Thema zu abonnieren. Es scheint nicht richtig zu sein, eine weitere Instanz desselben Message Listener Containers zu erstellen, nur um einen anderen Abonnenten (Message Driven POJO) auf dasselbe Thema hören zu lassen.Spring JMS Message Listener Container

Kann jemand für mich etwas Licht darauf werfen? Ich denke, ich bin vielleicht ein wenig verwirrt.

Vielen Dank im Voraus!

Antwort

0

Der Container ist eine Art Wrapper zum "Anpassen" eines POJO an den Empfang von Nachrichten aus einer Warteschlange oder einem Thema. Wenn Sie mehrere Listener wünschen, erhalten Sie mehrere Container.

4

Wenn Sie mit Message-Driven EJBs vertraut sind, dann ersetzt ein Spring MessageListenerContainer effektiv eine MDB. Es erhält seinen Namen, da es mit dem JMS-Zweig/der JMS-Warteschlange sowie einem einzelnen JMS-Nachrichtenlistener verdrahtet ist und Nachrichten von diesem Zweig/dieser Warteschlange abruft und sie Ihrem MessageListener zuführt.

Sie haben recht, dass nur ein MessageListener mit jedem Container gleichzeitig registriert werden kann. Beachten Sie jedoch, dass der MessageListenerContainer-Code zwar recht komplex sein kann, aber eine sehr einfache Laufzeitkomponente darstellt. Haben Sie keine Angst, mehrere Instanzen davon zu erstellen.

Stellen Sie außerdem sicher, dass Sie die entsprechende MessageListener-Implementierung für Ihre Situation auswählen. Die Implementierung von Simple und Default ist sehr unterschiedlich, aber keines ist "besser".

2

Jungs sind richtig, dass mehrere Container Ihnen helfen würden, aber es sieht wie ein falscher Ansatz aus. Seit JMS Ziel ist es, verschiedene Anwendungen/Dienste zu integrieren, anstatt interne Anwendungsprozesse (mehrere Klassen, die Sie sprechen). Ich würde vorschlagen, Push-Nachricht an verschiedene Klassen selbst nach dem Empfang von ihnen durch Nachrichten-Listener. Ansonsten werfen Sie einen Blick auf Frameworks wie Apache Camel oder Spring Integration.

Verwandte Themen