Практическое руководство. Отправка сообщений во внутренних транзакциях
Обновлен: Ноябрь 2007
Внутренние транзакции используют только ресурсы очередей сообщений и полностью управляются из очередей сообщений с помощью класса MessageQueueTransaction. Для обработки транзакционного процесса необходимо создать экземпляр MessageQueueTransaction и передать его в сообщение, выбранное для отправки в качестве транзакции.
Транзакционным процессом можно управлять с помощью следующих методов.
Метод |
Цель использования |
---|---|
Задает начало транзакции, состоящей из одного или нескольких сообщений и операций. |
|
Завершает транзакцию, если все содержащиеся в сообщении операции были выполнены успешно. |
|
Используется в процессе проверки ошибок для отката транзакции. |
Примечание. |
---|
Отключенная или полностью заполненная очередь не рассматривается как сбой. |
В большинстве случаев транзакционный код должен включаться в Оператор Try... Catch... Finally (Visual Basic) (или try-catch-finally (Справочник по C#)). Это позволяет задать транзакцию в разделе Try инструкции, а затем использовать инструкцию Catch для вызова метода Abort в случае возникновения каких-либо ошибок. В качестве примера указанного подхода приводится следующий код.
Отправка сообщения в пределах внутренней транзакции
Создайте экземпляр компонента MessageQueue и задайте в качестве значения свойства Path очередь, на которую необходимо сослаться. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента MessageQueue.
Для управления транзакцией создайте экземпляр класса MessageQueueTransaction.
Вызовите метод Begin класса MessageQueueTransaction.
После вызова Begin определите каждое из сообщений, которое необходимо отправить. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента MessageQueue.
После отправки последнего сообщения для закрытия транзакции вызовите метод Commit экземпляра MessageQueueTransaction.
Весь итог транзакции рекомендуется включить в код проверки ошибок Try...Catch для обработки любых появившихся ошибок.
При обнаружении ошибки выполните откат транзакции, вызвав метод Abort.
Код может выглядеть следующим образом.
Dim transaction As New System.Messaging.MessageQueueTransaction transaction.Begin() Try MessageQueue1.Send("Message1", "Label1", transaction) MessageQueue1.Send("Message2", "Label2", transaction) MessageQueue1.Send("Message3", "Label3", transaction) transaction.Commit() Catch transaction.Abort() End Try
System.Messaging.MessageQueueTransaction transaction = new System.Messaging.MessageQueueTransaction(); transaction.Begin(); try { messageQueue1.Send("Message1", "Label1", transaction); messageQueue1.Send("Message2", "Label2", transaction); messageQueue1.Send("Message3", "Label3", transaction); transaction.Commit(); } catch { transaction.Abort(); }
См. также
Задачи
Практическое руководство. Создание транзакционных очередей
Практическое руководство. Создание экземпляров компонента MessageQueue
Основные понятия
Транзакционная обработка сообщений