Java Message Service - JMS

Java EE: Theoretische Grundlagen zu JMS

JMS steht für Java Message Service und ist eine API die Java EE Anwendungen das Erstellen, Verschicken und Empfangen von Nachrichten erlaubt. Damit ermöglicht JMS eine verteilte Kommunikation die zudem auch noch zuverlässig und asynchron ist. Hier findet man den theoretischen Teil zu JMS. Falls man mehr über die praktische Nutzung von JMS erfahren möchte, dem sei unser Java JMS Tutorial ans Herz gelegt. Vor dem Programmieren sollen die nachfolgenden Konzepte rund um JMS aber verstanden sein.

Grundsätzlich gibt es zwei verschiedene JMS Nachrichten Arten, nämlich Point-to-Point (PTP) und Publish-Subscribe (Pub/Sub).

Bei Point-to-Point ist jede Nachricht an eine bestimmte Queue adressiert, aus dieser die Nachrichten dann wieder von den Clients abgerufen werden können. Eine Queue behält die Nachricht dabei so lange, bis sie abgerufen oder abgelaufen ist. Damit hat bei PTP jede Nachricht genau einen Empfänger und es gibt keine zeitliche Abhängigkeit zwischen Sender und Empfänger, da die Queue die Nachrich so lange abspeichert, bis der Empfänger bereit ist und sie abruft.

Bei Publish/Subscribe hingegen wird die Nachricht an ein Topic gesendet. Clients können diese Topic „abonnieren“. Empfängt die Topic nun eine Nachricht, leitet sie automatisch diese Nachricht an alle abonnierten Clients weiter. Man kann sich das ganze etwa wie ein Mailverteiler vorstellen. Im Gegensatz zu Queues speichern Topic die Nachrichten aber nicht ab, sondern löschen diese sofort nach dem sie allen „Abonnenten“ (subscriber) zugeteilt wurde. Somit kann jede Nachricht mehrere Empfänger haben. Allerdings ist auch eine zeitliche Abhängigkeit gegeben. Da die Topic die Nachricht nach Empfang gleich weiter schickt, muss der Client auch zu diesem Zeitpunkt aktiv sein, ansonsten verpasst er die Nachricht. Diesen Nachteil fängt die JMS API aber ab, in dem sie den Abonnenten erlaubt beständige Abonnements zu erstellen. Damit empfangen sie auch Nachrichten, wenn sie selbst zum entsprechendem Zeitpunkt nicht aktiv sind.

Nachrichten können auf zwei Wege empfangen werden: synchron und asynchron. Beim synchronen Empfang ruft der Empfänger explizit die Nachricht über den Aufruf der „receive“-Methode. Beim asychronen Empfang registriert sich der Empfänger an einen „message listener“. Kommt eine Nachricht an, wird automatisch beim Empfänger eine „onMessage“-Methode aufgerufen.

Um mit JMS programmieren zu können, muss man sich einmal die nachfolgende JMS-Architektur verinnerlichen. Dieses setzt sich aus den folgenden sechs Bestandteile zusammen: Connection Factory, Connection, Session, Message Producer, Message Consumer und Queue/Topic. Das nachfolgende Schaubild veranschaulicht das Zusammenspiel dieser Komponente.

Aufbau von JMS

Wie man nun mit JMS in Java programmiert und wie man in der Praxis mit einem kleinen Java-Programm Nachrichten schicken und empfangen kann, dass könnt ihr in unserem Java JMS Tutorial nachlesen.