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.
In einigen
Fällen sind die Option, die Ihnen hier zur Verfügung stehen, sehr komplex. Die für MQEmpfangsknoten 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 mit einer Folge von Knoten verbinden, die Ausnahmebedingungen verarbeiten, die nach dem Catch-Datenfluss generiert wurden.
- 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 Empfangsknoten, Sendeknoten, Durchgangsknoten, Veröffentlichungsknoten, Empfangsknoten für Echtzeiteingabe, Knoten 'Echtzeitoptimierter_Fluss'.
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 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:
- Die MQEmpfangsknoten und SCADAEmpfangsknoten verfügen über Catch-Terminals.
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 verfügen über weitere Verarbeitungen für transaktionsorientierte Nachrichten (andere Empfangsknoten bearbeiten keine transaktionsorientierten Nachrichten).
- 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 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 zugehörige Catch-Terminal nicht verbunden ist, gibt der 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).
- 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.