Lese- und Schreibvorgänge in Nachrichtenwarteschlangen

Das Schreiben in Nachrichtenwarteschlangen erfolgt mithilfe der EGL-Anweisung add; das Lesen mit get next.

Bei der ersten Verwendung einer EGL-Anweisung mit einem WebSphere MQ-Datensatz während einer Programmausführung überprüft EGL, ob eine aktive Verbindung zu einem Warteschlangenmanager vorhanden ist. Ist dies nicht der Fall, wird eine Verbindung erstellt.

Nachdem Sie in die Nachrichtenwarteschlange geschrieben bzw. aus ihr gelesen haben, müssen Sie Ihre Änderungen möglicherweise festschreiben oder rückgängig machen.

Verbindung zu Warteschlangenmanagern herstellen

In einem EGL-Programm können Sie jeweils nur zu einem Warteschlangenmanager eine Verbindung herstellen.

EGL stellt bei der ersten Anweisung add oder get next in einem Programm automatisch eine Verbindung zum Warteschlangenmanager her, wobei der Name des WS-Managers verwendet wird, der in dem Systemressourcennamen angegeben ist, der dem Datensatz der Nachrichtenwarteschlange zugeordnet ist. Wenn kein WS-Manager-Name angegeben ist, ist der Warteschlangenmanager der für Ihr System definierte Standardwarteschlangenmanager. EGL trennt die Verbindung zum Warteschlangenmanager automatisch, wenn das Programm beendet wird, wobei alle offenen Dateien sowie die aktuelle Arbeitseinheit (falls diese noch geöffnet ist) geschlossen werden.

EGL stellt Beispielfunktionen mit dem Namen MQCONN und MQDISC bereit, die die Routinen MQCONN und MQDISC in der WebSphere MQ-API aufrufen. Verwenden Sie diese Funktionen in den folgenden Umständen:
  • Wenn der Manager der Verbindungswarteschlange und der Warteschlangenmanager, zu dem die Warteschlange gehört, unterschiedlich sind, verwenden Sie zum Herstellen einer Verbindung den Funktionsaufruf MQCONN, bevor Sie die Anweisung add oder get next im Programm ausgeben. Andernfalls verwendet die Anweisung add bzw. get next die aktuell geöffnete Verbindung, anstatt zu versuchen, eine Verbindung zum Warteschlangenmanager herzustellen, der im Systemressourcennamen angegeben ist.
  • Wenn Sie möchten, dass die Verbindung für ein Programm mit langer Ausführungszeit vom Warteschlangenmanager getrennt wird, bevor das Programm beendet wurde, verwenden Sie den Funktionsaufruf MQCONN, um die einleitende Verbindung herzustellen, und den Funktionsaufruf MQDISC, um die Verbindung zu trennen, wenn jeglicher Zugriff auf die Warteschlange abgeschlossen ist.

Weitere Informationen zu MQCONN und MQDISC finden Sie in Direkte WebSphere MQ-API-Aufrufe verwenden. In Workstationumgebungen (Windows NT, OS/2, AIX, Solaris und HP), stellt WebSphere MQ unterschiedliche Laufzeitbibliotheken für WebSphere MQ-Programme bereit. Die Auswahl hängt davon ab, ob das Programm auf demselben System wie der Manager der Nachrichtenwarteschlange ausgeführt wird, oder ob das Programm als WebSphere MQ-Client ausgeführt wird, der mit einem Manager auf einem Serversystem kommuniziert. Auf AIX- und HP-Systemen werden außerdem für Threadumgebungen und Nicht-Threadumgebungen unterschiedliche Bibliotheken bereitgestellt.

Nachrichten in Warteschlangen schreiben

Schreiben Sie Nachrichten mithilfe der Anweisung add in Warteschlangen, wobei der Datensatz der Nachrichtenwarteschlange als das Ein-/Ausgabeobjekt verwendet wird. EGL führt folgende Aktionen aus:
  1. Herstellen der Verbindung zur Warteschlange.
  2. Öffnen der Verbindung zur Warteschlange.
  3. Einreihen der Nachricht in die Warteschlange.
Sie müssen für den aktuell verbundenen Warteschlangenmanager eine lokale Definition der fernen Warteschlange verwenden, wenn beide der folgenden Bedingungen wahr sind:
  • Sie schreiben mithilfe der Anweisung add Nachrichten in eine Warteschlange eines anderen Warteschlangenmanagers.
  • Sie haben mithilfe der Anweisung add zuvor eine Nachricht in die Warteschlange geschrieben.

EGL speichert das Verbindungshandle für künftige add-Anweisungen.

Beim Auftreten einer der folgenden Bedingungen müssen Sie nach einer Anweisung add die Anweisung close verwenden, um die Verbindung zur Warteschlange zu schließen:
  • Vor dem Verwenden der Anweisung get next.
  • Zum Freigeben der Warteschlange für den Zugriff durch ein anderes Programm.
  • Zum Freigeben der Warteschlange, wenn Sie ein Programm mit langer Ausführungszeit haben und die Arbeit mit der Warteschlange beendet ist.

EGL schließt die Verbindung zur Warteschlange automatisch, wenn das Programm beendet wird.

Nachrichten aus Warteschlangen lesen

Lesen Sie Nachrichten aus Warteschlangen, indem Sie die Anweisung get next verwenden, wobei der Datensatz der Nachrichtenwarteschlange das Ein-/Ausgabeobjekt ist. Wenn Sie die Anweisung get next verwenden, führt EGL folgende Aktionen aus:
  1. Stellt eine Verbindung zum Warteschlangenmanager her, wenn der Warteschlangenmanager noch nicht verbunden ist.
  2. Öffnet die Warteschlange, wenn die Warteschlange noch nicht geöffnet ist.
  3. Ruft die nächste Nachricht aus der Warteschlange ab.
Sie müssen für den aktuell verbundenen Warteschlangenmanager eine lokale Definition der fernen Warteschlange verwenden, wenn beide der folgenden Bedingungen wahr sind:
  • Sie lesen mithilfe der Anweisung get next Nachrichten aus einer Warteschlange eines anderen Warteschlangenmanagers.
  • Sie haben zuvor mithilfe der Anweisung get next eine Nachricht aus einer Warteschlange gelesen.
Beim Auftreten einer der folgenden Bedingungen müssen Sie nach einer Anweisung get next die Anweisung close verwenden, um die Verbindung zur Warteschlange zu schließen:
  • Vor dem Verwenden der Anweisung add.
  • Zum Freigeben der Warteschlange für den Zugriff durch ein anderes Programm.
  • Zum Freigeben der Warteschlange, wenn Sie ein Programm mit langer Ausführungszeit haben und die Arbeit mit der Warteschlange beendet ist.

EGL schließt die Verbindung zur Warteschlange automatisch, wenn das Programm beendet wird.

Nachrichten festschreiben oder rückgängig machen

Wenn Sie in einer Transaktion, die eine Arbeitseinheit definiert, Nachrichten kombinieren, können die Nachrichten als Gruppe festgeschrieben oder rückgängig gemacht werden. Wenn eine Arbeitseinheit festgeschrieben wird, wird alles, was in der Transaktion enthalten ist, abgeschlossen. Wenn eine Arbeitseinheit rückgängig gemacht wird, wird alles, was in der Transaktion enthalten ist, entfernt.

Die für Feschreibungen und Rollbacks verwendeten Methoden hängen von Ihrer Umgebung ab. Folgende Umgebungen handhaben Festschreibungen und Rollbacks unabhängig von MQ:
  • AS/400
  • CICS for MVS/ESA
  • CICS for VSE/ESA
  • IMS

In diesen Transaktionsumgebungen werden Festschreibungen und Rollbacks für Nachrichtenwarteschlangen mit Festschreibungen und Rollbacks für andere wiederherstellbare Ressourcen, wie beispielsweise DB2-Datenbanken, unter Verwendung eines Protokolls für zweiphasige Festschreibung koordiniert.

In anderen Umgebungen werden Ressourcen für unterschiedliche Manager unabhängig voneinander festgeschrieben. EGL setzt die entsprechenden WebSphere MQ-Aufrufe für Festschreibungen und Rollbacks automatisch ab, wenn Sie sysLib.commit() und sysLib.rollback() verwenden.


Feedback