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 erwartet, die auf eine bestimmte Weise verarbeitet werden sollen. Oder Sie erstellen einen Nachrichtenfluss, der eine Datenbank aktualisiert und diese Aktualisierungen zurücksetzen muss, wenn andere Verarbeitungen nicht erfolgreich beendet werden.
In einigen Fällen sind die Option, die Ihnen hier zur Verfügung stehen, sehr komplex. Die für MQInput-Knoten und TimeoutNotification-Knoten bereitgestellten Optionen sind sehr umfangreich, da diese Knoten mit persistenten Nachrichten und Transaktionen arbeiten. Der MQInput-Knoten 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.
Stellen Sie eine Verbindung mit dem Fehlerterminal eines Knotens her, um eine explizite Überprüfung auf Fehler, die innerhalb des Knotens auftreten, durchzuführen. Falls Fehler auftreten, wird eine Ausnahmeliste an das Fehlerterminal übergeben. Die unvollständige Nachricht bleibt in dem Zustand erhalten, in dem sie sich vor dem Aufrufen des Knotens befand.
Sie können eine noch stärker spezialisierte Fehlerprüfung in Knoten einführen, die mithilfe von ESQL angepasst werden kann. Beispielsweise können Sie Exitverwaltungen in diesen Knoten erstellen. Weitere Informationen zum Erstellen von Exitverwaltungen mithilfe von ESQL finden Sie im Abschnitt DECLARE HANDLER-Anweisung.
Wenn Sie keine Verbindung zu einem Fehlerterminal herstellen, wird ein Fehler im Knoten in eine Ausnahme umgewandelt, die vom Knoten ausgelöst wird. Änderungen, die vor dem Auslösen der Ausnahme an der unvollständigen Nachrichte vorgenommen wurden, werden zurückgenommen. Die Ausnahme kann bewirken, dass die aktuelle Transaktion rückgängig gemacht wird, d. h., dass alle Aktualisierungen von Transaktionsressource zurückgenommen werden.
Sie können verhindern, dass die Transaktion rückgängig gemacht wird, und das Ausmaß steuern, bis zu dem Nachrichtenänderungen zurückgenommen werden, indem Sie einen TryCatch-Knoten in den Nachrichtenfluss einschließen. Wenn hinter dem Try-Terminal des TryCatch-Knotens eine Ausnahme ausgelöst wird, wird eine Ausnahmeliste an das Catch-Terminal des Knotens übergeben. Die unvollständige Nachricht wird in den Zustand zurückgesetzt, in dem sie sich befand, bevor sie den TryCatch-Knoten erreichte.
Andere Knoten als der TryCatch-Knoten besitzen ein Catch-Terminal. Diese Knoten stehen üblicherweise am Anfang einer Transaktion, wo eine nicht abgefangene Ausnahem ein Rollback verursachen würde. In diesen Knoten verhält sich das Catch-Terminal so, als wäre ein TryCatch-Knoten direkt mit dem Ausgangsterminal verbunden. Verwenden Sie das Catch-Terminal zur Behandlung von Ausnahmen, die hinter dem Knoten im Nachrichtenfluss ausgelöst werden. Stellen Sie eine Verbindung zum Fehlerterminal her, um Fehler innerhalb des Knotens zu behandeln.
Sie können eine oder mehrere der folgenden Optionen in Ihren Nachrichtenflüssen auswählen:
Wenn Sie in Ihrem Nachrichtenfluss benutzerdefinierte Knoten verwenden, sollten Sie die mit dem 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:
Wenn in einem Knoten eine Ausnahme erkannt wird, werden die Nachricht und die Ausnahmeinformationen an das Fehlerterminal (Failure) des Knotens übergeben. Falls der Knoten kein Fehlerterminal (Failure) besitzt oder keine Verbindung mit dem Fehlerterminal (Failure) besteht, löst der Broker eine Ausnahme aus und gibt die Steuerung an den nächstliegenden vorherigen Knoten zurück, der die Ausnahme 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 (Failure) 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 MQInput-Fehlern enthält weitere Informationen hierzu.
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).
Sie finden weitere Informationen hierzu in den Abschnitten Behandlung von MQInput-Fehlern und Behandlung von Zeitlimitbenachrichtigungsfehlern.
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-Knoten leitet die Nachricht nicht an das Fehlerterminal (Failure) weiter, wenn eine Ausnahme außerhalb des Knotens generiert wird und Sie keine Verbindung mit seinem Catch-Terminal hergestellt haben.
Weitere Informationen finden Sie unter Verbindungen zu Fehlerterminals (Failure) 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:
Weitere Informationen zu koordinierten Datenbankaktualisierungen finden Sie unter Transaktionalität für 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.
Informationen zu Beispielen können nur bei Verwendung des in das WebSphere Message Broker Toolkit integrierten bzw. online verfügbaren Information Center angezeigt werden. Muster können nur ausgeführt werden, wenn das im WebSphere Message Broker Toolkit integrierte Information Center verwendet wird.