Der Broker stellt eine allgemeine Fehlerbehandlung für alle Nachrichtenflüsse zur
Verfügung. Falls diese allgemeine Verarbeitung nicht ausreicht und Sie auf bestimmte
Fehlerbedingungen und -situationen mit besonderen Aktionen reagieren möchten, können Sie Ihre
Nachrichtenflüsse um eine eigene 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 MQInputsknoten und TimeoutNotificationsknoten bereitgestellten Optionen sind sehr umfangreich, da diese
Knoten mit persistenten Nachrichten und Transaktionen arbeiten. Der MQInputsknoten wird 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 Fehlerdatenfluss) verarbeiten.
- Verbinden Sie das Catch-Terminal des Empfangsknotens oder eines TryCatch-Knotens mit einer Knotenfolge, in der Ausnahmebedingungen, die außerhalb generiert werden, verarbeitet werden (Abfangdatenfluss).
- Fügen Sie einen oder mehrere TryCatch-Knoten an spezifischen Punkten im Nachrichtenfluss ein, um Ausnahmebedingungen abzufangen und zu verarbeiten, die von dem Nachrichtenfluss, der mit dem Try-Terminal verbunden ist, generiert werden.
- Fügen Sie einen Throw-Knoten ein oder schreiben Sie eine ESQL
THROW-Anweisung um eine Ausnahmebedingung zu generieren.
- Stellen Sie eine Verbindung mit dem Catch-Terminal des AggregateReply-Knotens her, um Aggregationsausnahmebedingungen zu verarbeiten, wenn Sie Aggregation verwenden.
- Stellen Sie sicher, dass alle von einem MQInput-Knoten empfangenen Nachrichten entweder
innerhalb einer Transaktion oder gar nicht verarbeitet werden.
- Stellen Sie sicher, dass alle von einem MQInput-Knoten empfangenen Nachrichten entweder
persistent sind oder nicht.
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 in diesem Abschnitt
beschäftigen sich nur mit den integrierten Knoten.
Beim Entwurf Ihres
Konzeptes zur Fehlerbehandlung sollten Sie folgende Faktoren berücksichtigen:
- Die meisten integrierten Knoten haben Fehlerterminals. Die Ausnahmen sind die Knoten AggregateControl, AggregateRequest, Input, Label, Output, Passthrough, Publication, Real-timeInput, Real-timeOptimizedFlow, Throw, Trace und TryCatch.
Wenn in einem Knoten eine Ausnahmebedingung erkannt wird,
werden die Nachricht und die Ausnahmebedingungsinformationen an das Fehlerterminal des Knotens übergeben. Falls der Knoten kein Fehlerterminal besitzt oder keine Verbindung mit dem Fehlerterminal besteht,
löst der Broker eine Ausnahmebedingung aus und gibt die Steuerung an den nächstliegenden
vorherigen Knoten zurück, der die Ausnahmebedingung verarbeiten kann. Dabei kann es sich um einen TryCatch-Knoten, einen AggregateReply-Knoten oder den Empfangsknoten
handeln.
Wenn ein MQInput-Knoten 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 oder (falls diese nicht definiert ist) in die Warteschlange für nicht zustellbare Nachrichten des Warteschlangenmanagers des Brokers zu stellen.
Der Abschnitt Behandlung von MQEmpfangsfehlern enthält weitere Informationen hierzu.
- Nur wenige integrierte Knoten haben Catch-Terminals.
Dabei handelt es sich um AggregateReply-, HTTPInput-, MQInput-, SCADAInput-, JMSInput-, JMSOutput-, TimeoutNotification- und TryCatch-Knoten.
Eine Nachricht wird nur 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.
- Der MQInput und der TimeoutNotificationsknoten verfügen über weitere Verarbeitungsmöglichkeiten für transaktionsorientierte Nachrichten (andere Empfangsknoten bearbeiten keine transaktionsorientierten Nachrichten).
Sie finden weitere Informationen hierzu in den Abschnitten Behandlung von MQEmpfangsfehlern und Behandlung von Zeitlimitbenachrichtigungsfehlern.
- Wenn Sie einen Traceknoten einschließen, der $Root oder $Body angibt, wird die gesamte Nachricht analysiert. Dadurch können Parser-Fehler generiert werden, die
ansonsten nicht erkannt werden.
Allgemeine Grundsätze der Fehlerbehandlung:
- Wenn Sie eine Verbindung mit dem Catch-Terminal des Empfangsknotens herstellen, legen Sie damit
fest, dass der Nachrichtenfluss alle Ausnahmebedingungen, die irgendwo im Ausgabedatenfluss generiert werden,
behandelt. Der Broker führt erst dann eine ROLLBACK-Operation oder sonstige Aktion aus, wenn im
Abfangdatenfluss eine Ausnahmebedingung vorliegt. Wenn Sie möchten, dass eine ROLLBACK-Operation ausgeführt
wird, nachdem eine Ausnahmebedingung ausgelöst und abgefangen wurde, müssen Sie dies im Abfangdatenfluss
bereitstellen.
- Falls Sie keine Verbindung mit dem Catch-Terminal des MQInput-Knotens oder HTTPInput-Knotens herstellen, können Sie eine Verbindung mit dem Fehlerterminal herstellen und einen Fehlerdatenfluss zur Behandlung von Ausnahmebedingungen, die von dem Knoten generiert werden, bereitstellen. Der Fehlerdatenfluss wird unverzüglich gestartet, sobald eine Ausnahmebedingung in dem Knoten auftritt.
Der Fehlerdatenfluss wird auch gestartet, wenn nach dem MQInput-Knoten eine Ausnahmebedingung generiert wird (entweder im Ausgabe- oder im Abfangdatenfluss). 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 Zurücksetzungen steigen.
Der HTTPInput- und der SCADAInput-Knoten leiten die Nachricht nicht an das Fehlerterminal weiter, wenn eine Ausnahmebedingung außerhalb des Knotens generiert wird und Sie keine Verbindung mit dem Catch-Terminal hergestellt haben.
- Wenn ein Knoten eine Nachricht an einen Abfangdatenfluss weiterleitet und eine andere Ausnahmebedingung
auftritt, durch die die Steuerung wieder an denselben Knoten zurückgegeben wird, behandelt der
Knoten die Nachricht so, als würde keine Verbindung mit dem Catch-Terminal bestehen.
- Wenn Sie weder mit den Fehler- noch den Catch-Terminals des Empfangsknotens eine Verbindung
herstellen, stellt der Broker eine Standardverarbeitung zur Verfügung (die vom jeweiligen Typ des
Empfangsknotens abhängig ist).
- Falls Sie ein umfassenderes Fehlerbehandlungs- und Wiederherstellungsverfahren
benötigen, fügen Sie einen oder mehrere TryCatch-Knoten ein, um eine stärker auf lokale
Anforderungen bezogene Fehlerbehandlung bereitzustellen.
- Wenn Sie über eine allgemeine Prozedur zur Behandlung bestimmter Fehler verfügen, kann es
sinnvoll sein, einen untergeordneten Datenfluss zu erstellen, der die erforderliche Knotenfolge
enthält. Fügen Sie diesen untergeordneten Datenfluss immer dann ein, wenn die zugehörige Aktion
ausgeführt werden soll.
Weitere Informationen finden Sie unter
Verbindungen zu Fehlerterminals herstellen, Fehler im Empfangsknoten verwalten und
Ausnahmen in einem TryCatch-Knoten abfangen.
Wenn Ihre Nachrichtenflüsse Datenbankaktualisierungen einschließen, kann die
Art und Weise, wie Sie die Knoten konfigurieren, die mit den betreffenden Datenbanken interagieren,
die Art und Weise der Fehlerbehandlung beeinflussen:
- Sie können angeben, ob Aktualisierungen festgeschrieben oder zurückgesetzt werden. Über die
Knoteneigenschaft Transaktion können Sie
festlegen, ob Datenbankaktualisierungen mit dem Nachrichtenfluss festgeschrieben oder zurückgesetzt
werden (Option Automatisch) oder ob sie
festgeschrieben oder zurückgesetzt werden, wenn der Knoten selbst beendet wird (Option Festschreiben). Sie müssen sicherstellen,
dass die Kombination aus diesen Eigenschaften und der Fehlerverarbeitung des Nachrichtenflusses zum
richtigen Ergebnis führt.
- 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 Global koordinierte Nachrichtenflüsse konfigurieren.
Bei Nachrichtenflüssen, die für die Aggregation vorgesehen sind, müssen einige Punkte beachtet werden, die
nicht in diesem Abschnitt behandelt werden. Informationen zu Nachrichtenflüssen für die Aggregation finden Sie unter Handhabung von Ausnahmebedingungen in Aggregationsflüssen.
Das folgende Beispielprogramm veranschaulicht die Verwendung einer Fehlerbehandlungsroutine zum Erfassen von Fehlerinformationen und Speichern der Informationen in einer Datenbank. Bei der Fehlerbehandlungsroutine handelt es sich um einen untergeordneten Nachrichtenfluss, der unverändert jedem beliebigen Nachrichtenfluss zugeordnet werden kann. Das Beispielprogramm veranschaulicht zudem die Konfiguration von Nachrichtenflüssen zur Steuerung von Transaktionalität; insbesondere die Verwendung global koordinierter Transaktionen zur Sicherstellung der allgemeinen Datenintegrität.
Sie können Beispiele nur anzeigen, wenn Sie das Information Center
verwenden, das im Message
Brokers Toolkit integriert ist.