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.
In einigen
Fällen sind die Option, die Ihnen hier zur Verfügung stehen, sehr komplex. Die für MQInputsknoten 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 mit einer Knotenfolge, in der Ausnahmebedingungen, die außerhalb generiert werden, verarbeitet werden (Abfangdatenfluss).
- 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 Input, Output, Passthrough, Publication, Real-timeInput, und Real-timeOptimizedFlow
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 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.
- Die MQInput- und SCADAInput-Knoten haben Catch-Terminals.
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-Knoten verfügt weitere Verarbeitungsmöglichkeiten für transaktionsorientierte Nachrichten (andere Empfangsknoten bearbeiten keine transaktionsorientierten Nachrichten).
- 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 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 SCADAInput-Knoten leitet die Nachricht nicht an das Fehlerterminal weiter, wenn eine Ausnahmebedingung außerhalb des Knotens generiert wird und Sie keine Verbindung mit seinem 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).
- 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.
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.