Der Broker stellt eine einfache Fehlerbehandlung für alle
Nachrichtenflüsse bereit. Wenn diese einfache Verarbeitung nicht ausreichend ist
und Sie bestimmte Aktionen als Antwort auf bestimmte Fehlerbedingungen und
Situationen ausführen möchten, können Sie Ihre Nachrichtenflüsse mit Ihrer
eigenen Fehlerbehandlung erweitern. Sie können beispielsweise
einen Nachrichtenfluss entwerfen, der bestimmte Fehler, die Sie in einer
bestimmten Weise verarbeiten möchten, erwartet oder einen Nachrichtenfluss, der
eine Datenbank aktualisiert und diese Aktualisierungen zurücksetzen muss, wenn
andere Verarbeitungen nicht erfolgreich beendet wurden.
In einigen
Fällen sind die Option, die Ihnen hier zur Verfügung stehen, sehr komplex. Die für MQEmpfangsknoten und Zeitlimitbenachrichtigungsknoten bereitgestellten Optionen sind sehr umfangreich, da diese Knoten mit persistenten Nachrichten und Transaktionen arbeiten. MQEmpfangsknoten werden außerdem von den Konfigurationsoptionen für WebSphere MQ beeinflusst.
Da Sie verschiedene Fehler auf unterschiedliche Arten
handhaben können, gibt es hierfür keine vorgeschriebenen Prozeduren. In diesem Abschnitt
werden die Fehlerbehandlung und die zur Verfügung stehenden Optionen grundsätzlich
beschrieben. Sie müssen sich aufgrund dieser Informationen entscheiden, welche
Kombination der Auswahlmöglichkeiten für Sie in den einzelnen Situationen am passendsten ist.
Sie können eine oder mehrere der folgenden Optionen in Ihren Nachrichtenflüssen auswählen:
- Das Fehlerterminal eines Knotens mit einer Folge von Knoten verbinden, die
die interne Ausnahmebedingung des Knotens (den Fehlernachrichtenfluss) verarbeiten.
- Das Catch-Terminal eines Empfangsknotens oder einen Abfangversuchsknoten mit einer Folge von Knoten verbinden, die Ausnahmebedingungen verarbeiten, die nach dem Catch-Datenfluss generiert wurden.
- An bestimmten im Nachrichtenfluss Punkten einen oder mehrere Abfangversuchsknoten einfügen, um Ausnahmebedingungen abzufangen und zu verarbeiten, die von dem mit dem Try-Terminal verbundenen Nachrichtenfluss generiert wurden.
- Einen Ausnahmeknoten einschließen oder eine ESQL-THROW-Anweisung
codieren, um eine Ausnahmebedingung zu generieren.
- Bei Verwendung von Aggregation das Catch-Terminal des Knotens für Aggregationsantworten verbinden, um Aggregations-Ausnahmebedingungen zu verarbeiten.
- Sicherstellen, dass alle von einem MQEmpfangsknoten empfangenen Nachrichten entweder innerhalb einer Transaktion oder gar nicht verarbeitet werden.
- Sicherstellen, dass alle von einem MQEmpfangsknoten empfangenen Nachrichten entweder persistent oder nicht-persistent sind.
Falls Sie benutzerdefinierte Knoten in Ihrem Nachrichtenfluss
einschließen, müssen Sie die vom Knoten bereitgestellten Informationen lesen, um
nachvollziehen zu können, wie Fehler auf diesen Knoten behandelt werden. Die Beschreibungen
dieses Kapitels beschränken sich auf integrierte Knoten.
Beim Entwurf Ihres
Konzepts zur Fehlerbehandlung sollten Sie folgende Faktoren berücksichtigen:
- Die meisten integrierten Knoten verfügen über Fehlerterminals. Ausnahme hiervon sind die Knoten zur Aggregationssteuerung, Knoten für Aggregationsanforderungen, Empfangsknoten, Kennungsknoten, Sendeknoten, Durchgangsknoten, Veröffentlichungsknoten, Empfangsknoten für Echtzeiteingabe, Knoten 'Echtzeitoptimierter_Fluss', Ausnahmeknoten, Traceknoten und Abfangversuchsknoten.
Wird
in einem Knoten eine Ausnahmebedingung entdeckt, werden die Informationen der
Nachricht und der Ausnahmebedingung an den Fehlerterminal des Knotens weitergeleitet.
Wenn der Knoten kein Fehlerterminal hat oder nicht verbunden ist, gibt der Broker
eine Ausnahmebedingung aus und gibt die Steuerung an den nächsten
vorangegangenen Knoten zurück, der diese Ausnahmebedingung verarbeiten kann. Dies kann ein
Abfangversuchsknoten, ein Knoten für Aggregationsantworten oder ein Empfangsknoten sein.
Wenn ein MQEmpfangsknoten einen internen Fehler entdeckt, verhält er sich etwas anders. Bei einem nicht verbundenen Fehlerterminal versucht er, die
Nachricht in die Warteschlange zum Wiedereinreihen zurückgesetzter Nachrichten der Eingabewarteschlange zu stellen oder (falls diese nicht definiert ist) in die Warteschlange für nicht zustellbare Post des Warteschlangenmanagers des Brokers.
Weitere Informationen finden Sie unter:
- Nur wenige integrierte Knoten verfügen über Catch-Terminals.
Dazu zählen Knoten für Aggregationsantworten, HTTPEmpfangsknoten, MQEmpfangsknoten,
SCADAEmpfangsknoten, JMSEmpfangsknoten, JMSSendeknoten, Zeitlimitbenachrichtigungsknoten und Abfangversuchsknoten.
Eine Nachricht wird nur dann zum Catch-Terminal weitergegeben, wenn sie zunächst vom
Knoten in der Folge weitergegeben wurde (z. B. an die mit dem Ausgangsterminal verbundenen
Knoten).
- Wenn eine Nachricht an das Fehler- oder Catch-Terminal weitergegeben wird, erstellt
der Knoten eine neue Ausnahmeliste und füllt diese mit einer Ausnahmebedingung aus,
die den aufgetretenen Fehler darstellt. Die Ausnahmeliste wird als Teil der
Nachrichtenbaumstruktur weitergegeben.
- Die MQEmpfangsknoten und Zeitlimitbenachrichtigungsknoten verfügen über weitere Verarbeitungen für transaktionsorientierte Nachrichten (andere Empfangsknoten bearbeiten keine transaktionsorientierten Nachrichten).
Weitere Informationen hierzu finden Sie in den folgenden Abschnitten:
- Wenn Sie einen Traceknoten einschließen, der $Root oder $Body angibt, wird die vollständige Nachricht syntaktisch analysiert. Dadurch werden unter Umständen Parser-Fehler generiert, die sonst nicht entdeckt würden.
Die Prinzipien der Fehlerbehandlung sind wie folgt:
- Wenn Sie das Catch-Terminal des Empfangsknotens verbinden, zeigen Sie an,
dass der Nachrichtenfluss alle Ausnahmebedingungen bearbeitet, die irgendwo
im Nachrichtenausgabefluss generiert wurden. Der Broker führt keine ROLLBACK-Operation
oder Aktion aus, außer es befindet sich eine Ausnahmebedingung im Catch-Nachrichtenfluss. Wenn Sie
eine ROLLBACK-Operation durchführen möchten, nachdem eine Ausnahmebedingung aufgetreten oder abgefangen
wurde, muss dies im Catch-Nachrichtenfluss enthalten sein.
- Wenn Sie das Catch-Terminal des MQEmpfangsknotens oder des HTTPEmpfangsknotens nicht verbinden, können Sie stattdessen das Fehlerterminal verbinden und einen Fehlernachrichtenfluss zur Verfügung stellen, um die vom Knoten generierten Ausnahmebedingungen zu bearbeiten. Der Fehlernachrichtenfluss
wird sofort aufgerufen, wenn eine Ausnahmebedingung im Knoten eintritt.
Der Fehlernachrichtenfluss wird auch aufgerufen, wenn eine Ausnahmebedingung in der Folge nach dem MQEmpfangsknoten (entweder im Ausgabe- oder im Catch-Nachrichtenfluss). Es handelt sich um eine transaktionsorientierte Nachricht, und das Zurückstellen der Nachricht in der Eingabewarteschlange lässt den Rücksetzungszähler auf den Grenzwert für die ROLLBACK-Operation steigen.
Wenn eine Ausnahmebedingung nach dem Knoten generiert wurde und
das Catch-Terminal nicht verbunden ist, geben die HTTPEmpfangsknoten und SCADAEmpfangsknoten die Nachricht nicht an das Fehlerterminal weiter.
- Wenn ein Knoten eine Nachricht an einen Catch-Nachrichtenfluss weitergibt
und eine weitere Ausnahmebedingung eintritt, die die Steuerung an denselben Knoten
zurückgibt, behandelt der Knoten die Nachricht so, als ob das Catch-Terminal
nicht verbunden wäre.
- Wenn Sie nicht entweder das Fehler- oder das Catch-Terminal des Empfangsknotens
verbinden, stellt der Broker eine Standardverarbeitung bereit (diese ist vom Typ des
Empfangsknotens abhängig).
- Wenn Sie eine umfassendere Fehler- und Wiederherstellungsmethode
wünschen, müssen Sie mindestens einen Abfangversuchsknoten einschließen, um mit mehreren
lokalisierten Bereichen für die Fehlerbehandlung arbeiten zu können.
- Bei einer allgemeinen Vorgehensweise zur Behandlung von bestimmten Fehlern
ist es unter Umständen vorteilhaft, einen untergeordneten Nachrichtenfluss mit der Folge der erforderlichen Knoten zu erstellen. Schließen
Sie diesen untergeordneten Nachrichtenfluss dort ein, wo die Aktion ausgeführt werden soll.
Weitere Informationen hierzu finden Sie in den folgenden Abschnitten:
Enthalten Ihre Nachrichtenflüsse Datenbankaktualisierungen kann die Weise, in der Sie Knoten konfigurieren, die mit diesen Datenbanken interagieren, ebenfalls die Fehlerbehandlung beeinflussen:
- Sie können angeben, ob Aktualisierungen festgeschrieben oder zurückgesetzt werden.
Sie können die Eigenschaft des Knotens Transaktion
festsetzen, so dass Datenbankaktualisierungen im Nachrichtenfluss festgeschrieben oder
zurückgesetzt werden (Option Automatisch) oder festgeschrieben oder zurückgesetzt werden, wenn der Knoten selbst beendet wird (Option Festschreiben). Stellen
Sie sicher, dass die Kombination dieser Eigenschaftseinstellungen mit der
Fehlerbehandlung im Nachrichtenfluss das korrekte Ergebnis erzielt.
- Sie können festlegen, wie Datenbankfehler behandelt werden. Über die Eigenschaften
Warnungen als Fehler behandeln und
Ausnahme für Datenbankfehler ausgeben können Sie
das Standardverhalten der Datenbankfehlerbehandlung ändern.
Weitere Informationen zu koordinierten Datenbankaktualisierungen
finden Sie unter Nachrichtenflusstransaktionen konfigurieren.
Bei der Aggregation von Nachrichtenflüssen sollten Sie einige Dinge einbeziehen, die
nicht in diesem Abschnitt behandelt wurden. Weiter Informationen dazu finden Sie unter
Handhabung von Ausnahmebedingungen in Aggregationsflüssen.