Wenn Sie die Nachrichtenflussverarbeitung mit anderen Ressourcen koordinieren möchten, müssen Sie die Eigenschaften sowohl der Knoten innerhalb des Nachrichtenflusses als auch des Nachrichtenflusses selbst konfigurieren.
Ein koordinierter Nachrichtenfluss wird innerhalb einer einzelnen Transaktion ausgeführt. Dies wird gestartet, wenn ein Empfangsknoten eine Nachricht empfängt und kann festgeschrieben oder zurückgesetzt werden, nachdem alle Verarbeitungsschritte abgeschlossen wurden. Sie können auch steuern, wie Datenbankfehler von dem Knoten verarbeitet werden, der mit der Datenbank interagiert.
Gehen Sie wie folgt vor, um den Nachrichtenfluss und die Knoten zu konfigurieren:
Die Eigenschaft Transaktion kann auf die folgenden Werte gesetzt werden:
Wenn die gesamte Verarbeitung durch den Nachrichtenfluss koordiniert werden soll, müssen Sie diesen Wert auswählen.
Wenn Sie mehrere ODBC-Verbindungen definieren, treten möglicherweise Probleme in Bezug auf Datenbanksperren auf. Insbesondere bedeutet dies Folgendes: Wenn ein Knoten mit der Transaktionalität Automatisch eine Operation wie beispielsweise INSERT oder UPDATE ausführt, die zu einer Sperre eines Datenbankobjekts (z. B. einer Tabelle) führt, und ein nachfolgender Knoten versucht, über eine andere ODBC-Verbindung auf dieses Datenbankobjekt zuzugreifen, tritt eine unendliche Sperre (gegenseitige Sperre) auf.
Der zweite Knoten wartet darauf, dass die Sperre des ersten Knotens freigegeben wird, aber der erste Knoten schreibt seine Operationen erst fest und gibt die Sperre frei, wenn der Nachrichtenfluss abgeschlossen ist; dies wird jedoch nie eintreten, da der zweite Knoten darauf wartet, dass die Datenbanksperre des ersten Knotens freigegeben wird.
Eine derartige Situation kann von keinen DBMS-Routinen zur automatischen Vermeidung von gegenseitigen Sperren entdeckt werden, da die beiden Operationen indirekt unter Verwendung des Brokers interagieren.
Diese Art des Sperrproblems kann auf zwei Arten vermieden werden:
Die Produktdokumentation Ihrer Datenbank enthält Informationen darüber, welche Datenbankobjekte von bestimmten Operationen gesperrt werden, und wie der Parameter für das Sperrzeitlimit Ihrer Datenbank konfiguriert werden soll.
Die unten stehende Tabelle enthält eine Zusammenfassung der Aktionen, die als Reaktion auf bestimmte Eigenschafteneinstellungen für die Empfangs- und Sendeknoten ausgeführt werden.
Nachrichtenpermanenz a | Transaktionsmodus des Empfangsknotens | Transaktionsmodus des MQSende- oder MQAntwortknotens | Nachrichtenfluss ist global koordiniert? |
---|---|---|---|
Ja | Ja | Automatisch | Ja |
Nein | Ja | Automatisch | Ja |
Ja | Nein | Automatisch | Nein |
Nein | Nein | Automatisch | Nein |
Ja | Automatisch | Automatisch | Ja |
Nein | Automatisch | Automatisch | Nein |
Beliebig b | Beliebig b | Ja | Ja |
Beliebig b | Beliebig b | Nein | Nein |
Der Standardwert für jeden Empfangsknoten lautet Ja, was bedeutet, dass die eingehenden Nachrichten unter Synchronisationspunktsteuerung verarbeitet werden. Darüber hinaus werden Nachrichten, die an den Sendeknoten gesendet werden, unter Synchronisationspunktsteuerung zugestellt. Sie können dieses Verhalten ändern, wenn es sich beim Sendeknoten um einen MQSende- oder MQAntwortknoten handelt, die beide über die Eigenschaft Transaktionsmodus verfügen.
Wenn Sie den Transaktionsmodus in einem Empfangsknoten auf Automatisch setzen, werden die eingehenden Nachrichten nur unter der Synchronisationspunktsteuerung verarbeitet , wenn sie als permanent definiert sind. An den MQSendeknoten gesendete Nachrichten werden unter Synchronisationspunktsteuerung zugestellt, es sei denn, Sie ändern im MQSendeknoten explizit den Transaktionsmodus.
Unter z/OS sind Transaktionen immer global koordiniert. Die Einstellung der Eigenschaft koordinierte Transaktion für einen Nachrichtenfluss wird ignoriert. Die Koordination wird immer von RRS bereitgestellt.