JMS Modell

Das Modell JMS definiert eine Gruppe von Schnittstellen, die Java -Anwendungen verwenden können, um Messaging-Operationen auszuführen. IBM® MQ classes for JMS als JMS -Provider definiert, wie JMS -Objekte mit IBM MQ -Konzepten in Beziehung stehen. Die Spezifikation JMS erwartet, dass bestimmte JMS -Objekte verwaltete Objekte sind.

Die Spezifikation JMS und das Paket javax.jms definieren eine Gruppe von Schnittstellen, die Java -Anwendungen für die Ausführung von Messaging-Operationen verwenden können.

Ab IBM MQ 8.0unterstützt das Produkt die JMS 2.0 -Version des JMS-Standards, die eine vereinfachte API einführt und gleichzeitig die klassische API aus JMS 1.1beibehält.

Vereinfachte API

JMS 2.0 führt die vereinfachte API ein und behält gleichzeitig die domänenspezifischen und domänenunabhängigen Schnittstellen von JMS 1.1bei. Die vereinfachte API reduziert die Anzahl der zum Senden und Empfangen von Nachrichten erforderlichen Objekte und besteht aus den folgenden Schnittstellen:
ConnectionFactory
Eine ConnectionFactory ist ein verwaltetes Objekt, das von einem JMS -Client verwendet wird, um eine Verbindung zu erstellen. Diese Schnittstelle wird auch in der klassischen API verwendet.
JMSContext
JMS-Kontext - Dieses Objekt vereint die Objekte "Connection" und "Session" der klassischen API. JMSContext-Objekte können aus anderen JMSContext-Objekten erstellt werden, wobei die zugrunde liegende Verbindung dupliziert wird.
JMSProduzent
Ein JMS-Produzent wird von einem JMS-Kontext erstellt und zum Senden von Nachrichten an eine Warteschlange oder ein Thema verwendet. Das JMSProducer-Objekt erstellt Objekte, die zum Senden der Nachricht erforderlich sind.
JMSKonsument
Ein JMS-Konsument wird von einem JMS-Kontext erstellt und zum Empfangen von Nachrichten aus einem Thema oder einer Warteschlange verwendet.
Die vereinfachte API hat verschiedene Auswirkungen:
  • Das JMSContext-Objekt startet die zugrunde liegende Verbindung immer automatisch.
  • JMSErzeuger und JMSKonsumenten können jetzt direkt mit Nachrichtenhauptteilen arbeiten, ohne das gesamte Nachrichtenobjekt mit der Methode getBody der Nachricht abrufen zu müssen.
  • Nachrichteneigenschaften können für das JMSProducer-Objekt unter Verwendung der Methodenverkettung festgelegt werden, bevor ein 'Hauptteil', ein Nachrichteninhalt, gesendet wird. Der JMSProducer verarbeitet die Erstellung aller Objekte, die zum Senden der Nachricht erforderlich sind. Mit JMS 2.0können Eigenschaften wie folgt festgelegt und eine Nachricht gesendet werden:
    context.createProducer().
    setProperty("foo", "bar").
    setTimeToLive(10000).
    setDeliveryMode(NON_PERSISTENT).
    setDisableMessageTimestamp(true).
    send(dataQueue, body);
    

JMS 2.0 führt auch gemeinsam genutzte Subskriptionen ein, bei denen Nachrichten von mehreren Konsumenten gemeinsam genutzt werden können. Alle JMS 1.1 -Subskriptionen werden als nicht gemeinsam genutzte Subskriptionen behandelt.

Klassische API

Die folgende Liste enthält eine Zusammenfassung der JMS -Hauptschnittstellen der klassischen API:
Destination
Ziel - Ein Destination-Objekt ist der Ort, an den eine Anwendung Nachrichten sendet, und/oder eine Quelle, aus der eine Anwendung Nachrichten empfängt.
ConnectionFactory
Verbindungsfactory - Ein ConnectionFactory-Objekt bindet eine Gruppe von Konfigurationseigenschaften für eine Verbindung ein. Eine Anwendung verwendet eine Verbindungsfactory, um eine Verbindung zu erstellen.
Verbindung
Verbindung - Ein Connection-Objekt bindet die aktive Verbindung einer Anwendung in einen Messaging-Server ein. Eine Anwendung verwendet eine Verbindung, um Sitzungen zu erstellen.
Sitzung
Sitzung - Ein Session-Objekt ist ein Einzelthreadkontext zum Senden und Empfangen von Nachrichten. Eine Anwendung verwendet eine Sitzung, um Nachrichten, Nachrichtenproduzenten und Nachrichtenkonsumenten zu erstellen. Eine Sitzung ist entweder transaktionsbasiert oder nicht transaktionsbasiert.
Nachricht
Nachricht - Ein Message-Objekt bindet eine Nachricht ein, die von einer Anwendung gesendet oder empfangen wird.
MessageProducer
Nachrichtenproduzent - Eine Anwendung verwendet ein MessageProducer-Objekt zum Senden von Nachrichten an ein Ziel.
MessageConsumer
Nachrichtenkonsument - Eine Anwendung verwendet ein MessageConsumer-Objekt zum Empfangen von Nachrichten, die an ein Ziel gesendet wurden.
Abbildung 1 zeigt diese Objekte und ihre Beziehungen.
Abb. 1. JMS -Objekte und ihre Beziehungen
Dieses Diagramm wird im umgebenden Text beschrieben.

Das Diagramm stellt die wichtigsten Schnittstellen dar: ConnectionFactory, Connection, Session, MessageProducer, MessageConsumer, Message und Destination. Eine Anwendung verwendet eine Verbindungsfactory, um eine Verbindung zu erstellen. Für die Erstellung von Sitzungen verwendet sie eine Verbindung. Die Anwendung kann dann eine Sitzung verwenden, um Nachrichten, Nachrichtenproduzenten und Nachrichtenkonsumenten zu erstellen. Die Anwendung verwendet zum Senden von Nachrichten an ein Ziel einen Nachrichtenproduzenten, während sie zum Empfangen von Nachrichten, die an ein Ziel gesendet wurden, einen Nachrichtenkonsumenten verwendet.

Ein Destination-, ConnectionFactory- oder Connection-Objekt kann gleichzeitig von verschiedenen Threads einer Multithread-Anwendung verwendet werden. Ein Session-, MessageProducer- oder MessageConsumer-Objekt kann hingegen nicht gleichzeitig von verschiedenen Threads verwendet werden. Die einfachste Methode, um sicherzustellen, dass ein Session-, MessageProducer- oder MessageConsumer-Objekt nicht gleichzeitig verwendet wird, ist die Erstellung eines separaten Session-Objekts für jeden Thread.

JMS unterstützt zwei Arten von Messaging:
  • Punkt-zu-Punkt-Messaging
  • Publish/Subscribe-Messaging
Diese Arten des Messaging werden auch als Messaging-Domänen bezeichnet. In einer Anwendung können beide Arten kombiniert werden. In einer Punkt-zu-Punkt-Domäne ist das Ziel eine Warteschlange, in einer Publish/Subscribe-Domäne ist es ein Thema.
Bei Versionen von JMS vor JMS 1.1verwendet die Programmierung für die Punkt-zu-Punkt-Domäne eine Gruppe von Schnittstellen und Methoden und die Programmierung für die Publish/Subscribe-Domäne eine andere Gruppe. Auch wenn sich beide ähneln, sind sie völlig getrennt voneinander. Ab JMS 1.1können Sie eine allgemeine Gruppe von Schnittstellen und Methoden verwenden, die beide Messaging-Domänen unterstützen. Diese gemeinsamen Schnittstellen bieten eine domänenunabhängige Darstellung der Messaging-Domänen. In Tabelle 1 sind die domänenunabhängigen JMS -Schnittstellen und ihre entsprechenden domänenspezifischen Schnittstellen aufgelistet.
Tabelle 1. Die JMS domänenunabhängige Schnittstelle und ihre entsprechenden domänenspezifischen Schnittstellen
Domänenunabhängige Schnittstellen Domänenspezifische Schnittstellen für Punkt-zu-Punkt-Domäne Domänenspezifische Schnittstellen für Publish/Subscribe-Domäne
ConnectionFactory QueueConnectionFactory TopicConnectionFactory
Verbindung QueueConnection TopicConnection
Destination Warteschlange Thema
Sitzung QueueSession TopicSession
MessageProducer QueueSender TopicPublisher
MessageConsumer
QueueReceiver
QueueBrowser
TopicSubscriber

JMS 2.0 behält alle domänenspezifischen Schnittstellen bei, sodass vorhandene Anwendungen diese Schnittstellen weiterhin verwenden können. Bei neuen Anwendungen sollten Sie jedoch die Verwendung der domänenunabhängigen Schnittstellen von JMS 1.1 oder der vereinfachten API von JMS 2.0in Betracht ziehen.

In IBM MQ classes for JMSstehen JMS -Objekte wie folgt mit IBM MQ -Konzepten in Beziehung:
  • Die Eigenschaften eines Connection-Objekts sind von den Eigenschaften der Verbindungsfactory abgeleitet, die zur Erstellung der Verbindung verwendet wurde. Diese Eigenschaften legen fest, wie eine Anwendung eine Verbindung zu einem Warteschlangenmanager herstellt. Beispiele für diese Eigenschaften sind der Name des Warteschlangenmanagers und bei Anwendungen, die sich im Clientmodus mit dem Warteschlangenmanager verbinden, der Hostname oder die IP-Adresse des Systems, auf dem der Warteschlangenmanager ausgeführt wird.
  • Ein Session-Objekt kapselt eine IBM MQ -Verbindungskennung, die daher den Transaktionsbereich der Sitzung definiert.
  • Ein MessageProducer -Objekt und ein MessageConsumer -Objekt binden jeweils eine IBM MQ -Objektkennung ein.

Bei Verwendung von IBM MQ classes for JMSgelten alle normalen Regeln von IBM MQ . Beachten Sie insbesondere, dass eine Anwendung zwar Nachrichten an eine ferne Warteschlange senden kann, aber nur Nachrichten aus einer Warteschlange empfangen kann, die zu dem Warteschlangenmanager gehört, mit dem die Anwendung verbunden ist.

Die JMS -Spezifikation erwartet, dass ConnectionFactory -und Destination-Objekte verwaltete Objekte sind. Ein Administrator erstellt und verwaltet verwaltete Objekte in einem zentralen Repository und eine JMS -Anwendung ruft diese Objekte über JNDI ( Java Naming and Directory Interface) ab.

In IBM MQ classes for JMSist die Implementierung der Destination-Schnittstelle eine abstrakte Superklasse von Queue und Topic, sodass eine Instanz von Destination entweder ein Queue-Objekt oder ein Topic-Objekt ist. Die domänenunabhängigen Schnittstellen behandeln eine Warteschlange (Queue) oder ein Thema (Topic) hingegen als Ziel (Destination). Die Messaging-Domäne eines MessageProducer- oder MessageConsumer-Objekts bestimmt sich daraus, ob das Ziel eine Warteschlange oder ein Thema ist.

In IBM MQ classes for JMS können Objekte der folgenden Typen daher verwaltete Objekte sein:
  • ConnectionFactory
  • QueueConnectionFactory
  • TopicConnectionFactory
  • Warteschlange
  • Thema
  • XAConnectionFactory
  • XAQueueConnectionFactory
  • XATopicConnectionFactory