Procesamiento transaccional de mensajes

Actualización: noviembre 2007

El procesamiento transaccional permite garantizar que los mensajes de una transacción se entregan en orden, se entregan una sola vez y se recuperan correctamente de su cola de destino. El componente MessageQueue puede utilizarse para enviar y recibir mensajes de forma transaccional. Cuando envía mensajes en una transacción, agrupa un conjunto de mensajes relacionados. Todos los mensajes incluidos en la transacción se entregan juntos en el orden en el que se enviaron (una transacción confirmada) o automáticamente no se envía ni se recibe ninguno si se producen problemas (una transacción anulada).

Desde las aplicaciones se pueden crear dos tipos principales de transacciones:

  • Las transacciones internas se utilizan para enviar mensajes entre dos o más recursos de Message Queue Server, es decir, entre dos colas pertenecientes a una empresa de Message Queue Server.

  • Las transacciones externas se utilizan para enviar mensajes entre colas y otros recursos, como bases de datos.

Las transacciones internas y externas se diferencian en el modelo de programación, en el administrador de recursos que se utiliza para controlar la transacción y en los modelos de uso.

Transacciones internas

Las transacciones internas se ejecutan mediante la creación de una instancia de la clase MessageQueueTransaction y su asociación a una instancia del componente MessageQueue. Las transacciones internas son el tipo más simple de transacción. Los mensajes se envían entre una o varias colas de mensajes, y un coordinador de transacciones de Message Queue Server determina las acciones que se producen. Ya que en el proceso estos pasos se controlan manualmente, las transacciones internas se pueden considerar transacciones manuales o explícitas, mientras que las transacciones externas son automáticas o implícitas.

El modelo de programación de las transacciones internas es muy sencillo: se llama al método Begin de la clase MessageQueueTransaction y se pasa una instancia de esta clase al método emisor o receptor. A continuación, se llama a Commit para guardar los cambios de la transacción en la cola de destino. Para obtener más información, vea Cómo: Enviar mensajes en transacciones internas.

La funcionalidad de las transacciones internas está limitada de algún modo, ya que no se pueden ejecutar transacciones con recursos en colas sin mensajes, como bases de datos. Si desea interactuar con una base de datos en una transacción, debe utilizar transacciones externas. Sin embargo, a pesar de estas limitaciones, las transacciones internas tienen mejor rendimiento que las externas.

Tanto las transacciones internas como las externas requieren que envíe los mensajes a una cola previamente marcada como transaccional. Para obtener más información, vea Cómo: Crear colas transaccionales.

Transacciones externas

Normalmente, las transacciones externas se utilizan cuando se desean enviar mensajes entre colas y otro tipo de recurso. Por ejemplo, es posible que desee recuperar un mensaje de una cola y enviarlo a una base de datos o viceversa. Las transacciones externas se diferencian de las transacciones internas en varios puntos:

  • Las transacciones externas confían en un coordinador que no forma parte del sistema Message Queue Server. En la mayoría de los casos, será el Coordinador de transacciones distribuidas de Microsoft (DTC). El DTC incluye los recursos necesarios en la transacción e indica el proceso para determinar si todas las acciones de la transacción se producen correctamente o fallan como unidad.

  • Una transacción externa tiene un modelo de programación más complicado. En lugar de llamar a Begin, Commit y Abort, es necesario especificar atributos que indiquen una transacción externa y registrar el componente con Servicios COM+ 1.0. También se debe utilizar una forma especial de los métodos Send y Receive que utilice un parámetro para el tipo de transacción, y establecer este campo en Automatic.

Existen además otros tipos de transacciones que pueden enviarse sin utilizar el componente MessageQueue. Para obtener más información sobre las transacciones en Visual Studio o .NET Framework, consulte los temas siguientes:

Para obtener más información...

Vea

Ejemplo que demuestra los atributos utilizados con las transacciones externas

MSDN Online.

Transacciones en C++

Transacciones

Vea también

Tareas

Cómo: Crear colas transaccionales

Cómo: Enviar mensajes en transacciones internas

Otros recursos

Leer y recibir mensajes