Konzept: Java Messaging Service (JMS)
Diese Richtlinie enthält einen detaillierten Überblick über das Java Messaging System (JMS).
Beziehungen
Zugehörige Elemente
Hauptbeschreibung

Einführung

Das Java Messaging System (JMS) bietet einen plattformübergreifenden Standard für die asynchrone Übertragung von Geschäftsdaten und Ereignissen im Unternehmen. Die Übertragung findet normalerweise prozess- und maschinenübergreifend statt. Objekte in Anwendungen, die in der Regel auf verschiedenen Maschinen laufen, kommunizieren untereinander, indem Sie über eine durch das JMS definierte Standardmenge an Schnittstellen auf die Services der MOM (Message-oriented Middleware) zugreifen.

Im Begleittext beschriebenes Diagramm.

JMS stellt eine Menge von Schnittstellen bereit, die den Java-Programmierer (der die Nachrichtenproduzenten und -konsumenten implementiert) von den MOM-Providern isolieren.

Diese Inhaltsseite beschreibt die wichtigsten Konzepte und die typische Verwendung von JMS.

Nachrichten

Eine Nachricht ist ein geschlossenes Paket von Geschäftsdaten. Sie besteht aus drei Einheiten:

  • Header: Enthält die Netz-Route-Informationen und Nachrichten-IDs.
  • Eigenschaften: Enthält die Metadaten für die Nachricht. JMS legt einige Eigenschaften verbindlich fest, aber die Anwendungsprogrammierer können eigene Eigenschaften hinzufügen.
  • Nutzdaten: Enthält die tatsächlichen Geschäftsdaten. Die Nutzdaten werden vollständig vom Anwendungsprogrammierer gesteuert.

Im Begleittext beschriebenes Diagramm.

In JMS ist die Nachricht in ein Objekt eingebunden, das die Schnittstelle javax.jms.Message implementiert. Ein Java-Programm kann, wie im folgenden Diagramm gezeigt, über diese Schnittstellen auf die Nachrichteneinheiten zugreifen. Die Nutzlast kann in mehreren Variationen geliefert werden, die später erläutert werden.

Im Begleittext beschriebenes Diagramm.

Der Header enthält Eigenschaften der Nachricht, die immer enthalten sein müssen. Folgende Eigenschaften sind im Header enthalten:

  • MessageID (Nachrichten-ID)
  • Timestamp (Zeitmarke)
  • CorrelationID (Korrelations-ID)
  • ReplyTo (Antwort an)
  • Destination (Nachrichtenziel)
  • DeliveryMode (Zustellmodus)
  • Redelivered (erneut zugestellt)
  • Type (Typ)
  • Expiration (Ablaufdatum)
  • Priority (Priorität)

Mit Hilfe der Eigenschaften können die Anwendungsprogrammierer Metadaten für die Nachricht bereitstellen. Die Eigenschaften bestehen aus einer beliebigen Menge von Namen-Wert-Paaren.

JMS unterstützt sechs Arten von Nutzdaten:

  • Textnachrichten
  • Objektnachrichten
  • Bytenachrichten
  • Zuordnungsnachrichten
  • Datenstromnachrichten
  • Nachricht (kein Hauptteil vorhanden)

Die Arten der Nutzdaten spiegeln sich in der Klassenhierarchie wider, in der Schnittstellen die javax.jms.Message erweitern. Im folgenden Klassendiagramm werden häufig verwendete Text-, Objekt- und Bytenachrichten gezeigt. Textnachrichten sind im allgemeinen Träger von XML-Daten.

Im Begleittext beschriebenes Diagramm.

Nachrichtenziele

JMS definiert das Konzept eines Nachrichtenziels. Nachrichten werden an Nachrichtenziele gesendet und von Nachrichtenzielen empfangen. Es gibt zwei Arten von Nachrichtenzielen:

  • Warteschlangen
  • Topics

Warteschlangen sind Nachrichtenziele, die verwendet werden, wenn die Nachrichten nur einen einzigen Empfänger haben. Wenn man die Nachrichten mit dem Senden von herkömmlichen Postsendungen vergleicht, dann entsprechen die Nachrichten den Postfächern, die einem bestimmten Empfänger gehören. Die Übertragung unter Verwendung von Warteschlangen wird als Punkt-zu-Punkt-Übertragung bezeichnet.

Topics sind Nachrichtenziele, die verwendet werden, wenn Nachrichten von mehreren Empfängern empfangen werden sollen und jeder Empfänger eine bestimmte Art von Nachrichten empfangen möchte. Wenn man wieder den Vergleich mit herkömmlichen Postsendungen zugrunde legt, dann ist dies ähnlich wie das Schreiben eines Artikels für eine Zeitung - der Artikel (die Nachricht) wird von einer beliebigen Zahl von Empfängern gelesen. Diese Modell wird häufig als Publish/Subscribe-Modell bezeichnet.

Zustellung der Nachricht

Nachrichten können auf zwei Arten zugestellt werden:

  • Persistent
  • Nicht persistent

Die persistente Zustellung von Nachrichten beinhaltet das Speichern der Nachricht in einer Datei oder einer Datenbank. Auf diese Weise ist eine garantierte Lieferung möglich. Die nicht persistente Zustellung verbessert die Leistung und reduziert den Speicheraufwand, allerdings kann die Lieferung der Nachricht nicht garantiert werden. Für die meisten Anwendungen, die JMS verwenden, wird in der Regel die persistente Zustellung gewählt.

JMS-Clients

JMS-Clients sind Java-Objekte, die JMS verwenden. Zwei Rollen sind definiert:

  • Nachrichtenproduzenten: Java-Programme, die Nachrichten erstellen und senden.
  • Nachrichtenkonsumenten: Java-Programme, die Nachrichten empfangen.

Das folgende Diagramm zeigt in einem Überblick, wie Produzent, Konsumenten und JMS-Provider zusammenarbeiten.

Im Begleittext beschriebenes Diagramm.

Ein Nachrichtenproduzent kann jede Java-Klasse sein, die Zugriff auf eine JMS-Implementierung hat. Die Nachrichtenproduzenten erstellen und senden Nachrichten.

Ein Nachrichtenkonsument kann jede Java-Klasse sein, die Zugriff auf eine JMS-Implementierung hat. Die Nachrichtenkonsumenten empfangen und verwalten Nachrichten.

Ein JMS-Client verwendet für den Zugriff auf JMS eine Gruppe von Schnittstellen. Die Objekte, die die JMS-Schnittstellen implementieren, werden über eine Gruppe von Factorys erstellt. Die ursprüngliche Factory ist die Verbindungs-Factory (ConnectionFactory). Die Verbindungs-Factory wird über JNDI ermittelt. Der JMS-Client verwendet die Verbindungs-Factory, um Verbindungsobjekte zu erstellen. Das Verbindungsobjekt wird zum Erstellen eines Sitzungsobjekts verwendet, das wiederum als Factory für die übrigen JMS-Objekte dient. Die folgende Abbildung zeigt die wichtigsten Beziehungen zwischen den Factorys ohne die Details der Warteschlangen und Topics.

Im Begleittext beschriebenes Diagramm.

Verbindungs-Factorys, Verbindungen und Sitzungen können zwei Formen annehmen: eine für Warteschlangen und eine für Topics. Das folgende Klassendiagramm zeigt die Schnittstellenhierarchie für JMS-Schlüsselkonzepte.

Im Begleittext beschriebenes Diagramm.

JMS-Provider

Ein JMS-Provider ist eine Implementierung, die die JMS-Spezifikation erfüllt. Der JMS-Provider ist zuständig für den Empfang, das Speichern und die Zustellung von Nachrichten.

Weitere Informationen

Weitere Informationen zu JMS finden Sie auf der Website http://java.sun.com/products/jms/.