Unter Verwendung der Benutzerexits kann die vom Benutzer bereitgestellte, angepasste Software die Daten überwachen, die die Nachrichtenflüsse in WebSphere-Nachrichtenbrokern passieren.
Die vom Benutzer bereitgestellten Funktionen können an bestimmten Punkten im Lebenszyklus einer Nachricht im Nachrichtenfluss aufgerufen werden, um Dienstprogrammfunktionen zur Abfrage von Informationen zum jeweiligen Punkt im Fluss und der Inhalte der Nachrichtenassembly zu aktivieren.
Die Benutzerexits können aufgerufen werden, wenn eines oder mehrere der folgenden Ereignisse auftreten:
- Ende der Arbeitseinheit (unit-of-work = UOW) oder Transaktion (COMMIT/ROLLBACK)
- Eine Nachricht wird von einem Knoten an den anderen übergeben.
- Eine Nachricht wird aus der Warteschlange der Eingabequelle genommen.
Im oben angezeigten Basisnachrichtenfluss können Nachrichten auf zwei Ebenen überwacht werden:
- Transaktionsebene
- Knotenebene
Auf Transaktionsebene können folgende Ereignisse überwacht werden:
- Nachrichten, die in den Fluss eingelesen werden
- Abschluss der Transaktion.
Auf Knotenebene können folgende Ereignisse überwacht werden:
- Nachrichten, die von einem Knoten an den anderen übergeben werden
- Fertigstellung der Verarbeitung für einen Knoten.
Dies bedeutet, dass es vier verschiedene Ereignistypen gibt, die in der folgenden Reihenfolge auftreten:
- Nachricht wird aus der Warteschlange der Eingabequelle genommen (wird in den Fluss eingelesen).
- Nachricht wird an den Knoten zur Verarbeitung weitergegeben
- Verarbeitung des Knotens abgeschlossen
- Ende der Transaktion.
Im zuvor angezeigten Diagramm wird der MQEmpfangsknoten als Beispiel verwendet, jedoch verfügen alle Empfangsknoten einschließlich benutzerdefinierter Knoten über diese Funktion.
In der Art und Weise, wie Benutzerexits aufgerufen werden, besteht jedoch ein geringfügiger Unterschied zwischen integrierten Knoten und benutzerdefinierten Knoten. Bei integrierten Knoten wird der Benutzerexit aufgerufen, sobald die Daten aus der externen Quelle gelesen wurden.
Bei benutzerdefinierten Knoten wird der Benutzerexit unmittelbar vor der Weitergabe der Nachricht durch den Knoten aufgerufen.
Im vorherigen Beispiel wird Ereignis 4 am Ende der Transaktion gestartet.
Der Benutzerexit wird nach Abschluss der Transaktion aufgerufen, d. h., die Verarbeitung des Benutzerexits ist nicht Teil der Transaktion.
Der Benutzerexit wird auch für den Fall aufgerufen, dass keine transaktionsorientierte Verarbeitung vom Fluss abgeschlossen wurde.
Wenn für die Nachrichtenflusseigenschaft 'Festschreibungszähler' ein Wert größer als 1 gesetzt wurde, besteht ein n:1-Verhältnis zwischen Ereignis 1 und Ereignis 4.
Dies gilt auch für Szenarios, die für den bestimmten Empfangsknoten spezifisch sind. Beispiel: für einen MQEmpfangsknoten ist die Eigenschaft 'Festschreiben nach Nachrichtengruppe' ausgewählt.
Mit Hilfe eines Benutzerexits kann eine beliebige Anzahl dieser Ereignisse überwacht werden. Für jedes dieser Ereignisse stehen dem Benutzerexit folgende Daten zur Verfügung.
Falls nicht anders angegeben, besteht lediglich Lesezugriff.
- Nachrichten aus Warteschlange entfernen:
- Bitstrom
- Empfangsknoten
- Umgebungsbaumstruktur (Lese-, Schreibzugriff)
- Nachricht wird an Knoten weitergegeben:
- Nachrichtenbaumstruktur (Message)
- Baumstruktur für lokale Umgebung (Lese-, Schreibzugriff)
- Ausnahmeliste
- Umgebungsbaumstruktur (Lese-, Schreibzugriff)
- Ausgangsknoten
- Zielknoten
- Verarbeitung des Knotens abgeschlossen:
- Nachrichtenbaumstruktur (Message)
- Baumstruktur für lokale Umgebung (Lese-, Schreibzugriff)
- Ausnahmeliste
- Umgebungsbaumstruktur (Lese-, Schreibzugriff)
- Knoten
- Vorgelagerter Knoten
- Ausnahme (falls vorhanden)
- Ende der Transaktion:
- Empfangsknoten
- Ausnahme (falls vorhanden)
- Umgebungsbaumstruktur (Lese-, Schreibzugriff)
Es können mehrere Benutzerexits registriert werden, die dann in einer definierten Reihenfolge aufgerufen werden (weitere Informationen finden Sie unter Befehl 'mqsichangeflowuserexits'). Wenn ein Benutzerexit Änderungen an einer Nachrichtenassembly vornimmt, sind diese Änderungen für die folgenden Benutzerexits sichtbar.
Beim Aufruf eines Benutzerexits können folgende Informationen abgefragt werden:
- Nachrichtenflussdaten:
- Nachrichtenflussname
- Brokername
- Warteschlangenmanager des Brokers
- Name der Ausführungsgruppe
- Eigenschaft 'Festschreibungszähler' des Nachrichtenflusses
- Eigenschaft 'Festschreibungsintervall' des Nachrichtenflusses
- Eigenschaft 'Koordinierte Transaktion' des Nachrichtenflusses
- Knotendaten:
- Knotenname
- Knotentyp
- Terminalname
- Knoteneigenschaften
- In der Nachrichtenassembly navigieren und lesen (Message,LocalEnvironment,ExceptionList)
- In der Umgebungsstruktur navigieren und lesen/schreiben.
Die Benutzerexits können auf dynamischer Basis registriert werden, d. h., die Konfiguration muss nicht erneut implementiert werden.