Transaktionale Meldungsverarbeitung
Aktualisiert: November 2007
Bei der transaktionalen Verarbeitung können Sie sicherstellen, dass die Meldungen einer Transaktion in der richtigen Reihenfolge nur einmal übermittelt und aus der Zielwarteschlange erfolgreich abgerufen werden. Mit der MessageQueue-Komponente können Meldungen transaktional gesendet und empfangen werden. Wenn Sie Meldungen innerhalb einer Transaktion senden, gruppieren Sie einen Satz zusammengehöriger Meldungen. Alle Meldungen in der Transaktion werden entweder zusammen in der Reihenfolge übermittelt, in der sie gesendet wurden (Transaktion, für die ein Commit ausgeführt wurde) oder automatisch nicht gesendet bzw. empfangen, wenn Probleme auftreten (abgebrochene Transaktion).
In Anwendungen können zwei grundlegende Transaktionstypen erstellt werden:
Interne Transaktionen werden zum Senden von Meldungen zwischen zwei oder mehreren Message Queuing-Ressourcen verwendet, d. h. zwischen zwei Warteschlangen, die zu einer Message Queuing-Organisation gehören.
Externe Transaktionen werden zum Senden von Meldungen zwischen Warteschlangen und anderen Ressourcen, wie etwa Datenbanken, verwendet.
Interne und externe Transaktionen unterscheiden sich im Programmiermodell, im Ressourcen-Manager, der zum Steuern der Transaktion verwendet wird, und in ihren Verwendungsmustern.
Interne Transaktionen
Interne Transaktionen werden ausgeführt, indem eine Instanz der MessageQueueTransaction-Klasse erstellt und diese einer Instanz der MessageQueue-Komponente zugeordnet wird. Interne Transaktionen stellen den einfachsten Typ von Transaktionen dar. Meldungen werden zwischen einer oder mehreren Meldungswarteschlangen gesendet, wobei der Message Queuing-Transaktionskoordinator die auftretenden Aktionen steuert. Da Sie diese Schritte im Prozess manuell steuern, können interne Transaktionen als manuelle oder explizite Transaktionen betrachtet werden, wohingegen externe Transaktionen automatisch ausgeführt werden oder implizit sind.
Das Programmiermodell für interne Transaktionen ist sehr einfach: Sie rufen die Begin-Methode der MessageQueueTransaction-Klasse auf und übergeben eine Instanz dieser Klasse an die sendende oder empfangende Methode. Dann rufen Sie Commit auf, um die Änderungen der Transaktion in der Zielwarteschlange zu speichern. Weitere Informationen hierzu finden Sie unter Gewusst wie: Senden von Meldungen in internen Transaktionen.
Interne Transaktionen sind in ihren Funktionen in sofern etwas eingeschränkt, als keine Transaktionen mit Ressourcen durchgeführt werden können, bei denen es sich nicht um Message Queuing-Ressourcen handelt, z. B. Datenbanken. Wenn Sie in einer Transaktion mit einer Datenbank interagieren möchten, müssen Sie daher externe Transaktionen verwenden. Trotz dieser Einschränkungen ist die Leistung interner Transaktionen besser als die externer Transaktionen.
Die Meldungen müssen sowohl für interne als auch für externe Transaktionen an eine Warteschlange gesendet werden, die als transaktional gekennzeichnet ist. Weitere Informationen hierzu finden Sie unter Gewusst wie: Erstellen von Transaktionswarteschlangen.
Externe Transaktionen
Externe Transaktionen werden üblicherweise verwendet, wenn Meldungen zwischen Warteschlangen und einem anderen Ressourcentyp gesendet werden sollen. Sie können z. B. eine Meldung aus einer Warteschlange abrufen und sie an eine Datenbank senden oder umgekehrt. Externe Transaktionen unterscheiden sich in mehrfacher Hinsicht von internen Transaktionen:
Externe Transaktionen hängen von einem Koordinator ab, der nicht Teil des Message Queuing-Systems ist. In den meisten Fällen handelt es sich dabei um den Distributed Transaction Coordinator (MS DTC). Der DTC listet die erforderlichen Ressourcen in der Transaktion auf und steuert den Prozess, mit dem festgelegt wird, ob alle Aktionen in der Transaktion als Einheit erfolgreich waren oder fehlgeschlagen sind.
Das Programmiermodell für externe Transaktionen ist komplexer. Anstelle eines einfachen Aufrufs von Begin, Commit und Abort geben Sie Attribute an, die eine externe Transaktion kennzeichnen, und registrieren die Komponente bei den COM+ 1.0-Diensten. Sie müssen außerdem eine besondere Form der Send-Methode und der Receive-Methode verwenden, die einen Parameter für den Transaktionstyp annimmt, und dieses Feld auf Automatic festlegen.
Andere Transaktionstypen können auch ohne Verwendung der MessageQueue-Komponente gesendet werden. Weitere Informationen über Transaktionen in Visual Studio oder .NET Framework finden Sie in den folgenden Themen:
Themenbereich |
Thema |
---|---|
Ein Beispiel für die Attribute, die in externen Transaktionen verwendet werden |
Siehe MSDN Online. |
Transaktionen in C++ |
Siehe auch
Aufgaben
Gewusst wie: Erstellen von Transaktionswarteschlangen
Gewusst wie: Senden von Meldungen in internen Transaktionen