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
- 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.
- 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.

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.
- Punkt-zu-Punkt-Messaging
- Publish/Subscribe-Messaging
| 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.
- 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.
- ConnectionFactory
- QueueConnectionFactory
- TopicConnectionFactory
- Warteschlange
- Thema
- XAConnectionFactory
- XAQueueConnectionFactory
- XATopicConnectionFactory