Transactional and nontransactional queues

Applies To: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2

Transactional and nontransactional queues

A transactional queue is one that only contains transactional messages, which are messages sent within a transaction. The requirements for sending and retrieving messages are based on the type of queue used (transactional or nontransactional) and the queue's location (local or remote).

Sending messages

When using transactions to send messages, the messages can be sent to any transactional queue regardless of where the queue is located, but only transactional queues can accept messages sent in the context of a transaction. In a similar way, nontransactional queues can only accept messages sent outside the context of a transaction. Note that only transactional messages are delivered with Exactly-Once In-Order Delivery (EOD) guarantees. For more information on transactional messaging, see Transactional messaging.

Receiving messages

When using a transaction to retrieve messages, the queue must be a local transactional queue. You cannot retrieve a message from a remote transactional queue or from a local nontransactional queue within a transaction. Message Queuing does not provide support for transactional remote-read operations (accessing the contents of a queue from a computer other than the one on which the queue is located). However, this same functionality can be achieved by using a transactional read-response application.

Note that nontransactional receive operations are allowed from any queue (transactional or nontransactional, local or remote). In particular, a nontransactional receive operation from a transactional queue is essentially a transaction consisting of a single receive operation.

Transactional read-response applications

A transactional read-response application is used when you need to retrieve transactional messages from a remote transaction queue. It uses transactions to redirect the messages from the remote queues on the sending computer to local queues on the receiving computer.

A read-response application resides on a server that contains two transactional queues:

  • An input queue for collecting messages from sending applications.

  • A read-request queue for collecting read-requests from the receiving application.

The read-response application does the following in a single transaction:

  • Retrieves a request made by the receiving application from the read-request queue.

  • Retrieves a message sent by the sending application from the input queue.

  • Forwards the message from the input queue to the receiving application that made the request.

In this way, the receiving application gets its messages within a transaction, without needing to perform a transactional remote-read operation.

The receiving application sends a request message to the read-request queue on the server, specifying the response queue to which the input message will be sent. This request can be made within the context of its own transaction. Note that it is independent of the transaction used to send the message back to the receiving application.