Transactional Messaging

09/10/2025 The foundation of the Service Broker programming model is transactional messaging.

The foundation of the Service Broker programming model is transactional messaging. Any

operation that involves Service Broker is part of the current transaction. Service Broker doesn’t

commit a messaging operation until the current transaction commits. If the transaction rolls

back, the Database Engine guarantees that all messaging operations that are part of the

transaction also roll back. An application manages messaging operations as part of managing

transactions.

For example, when a program sends a message within a transaction, Service Broker doesn’t

send the message over the network until the program commits the transaction. When a

program receives a message within a transaction, the Database Engine doesn’t permanently

remove the message from the queue until the program commits the transaction.

Transactional messaging helps you write robust, scalable applications by ensuring that the state

of the database remains consistent with the state of the queues. When an application makes a

change to the database and sends or receives a message, the change to the database and the

messaging operation are part of the same transaction. If the transaction rolls back, both the

change to the database and the messaging operation roll back. Both operations succeed, or

both operations fail. In the Service Broker model, an application uses transactional messaging

to guarantee that the messages sent by the application reflect the current state of the

database.

To take full advantage of transactional messaging, you write your applications so that

messaging operations occur in the same transaction as the database operations that the

messages represent. For example, an application that processes an order receives the message

for the order and updates the database with the order in a single transaction.

If the application instead receives the message in one transaction and updates the database in

a different transaction, a failure to update the database creates a situation where the message

no longer exists, but the change that the message requested hasn’t taken place. In this case,

the application doesn’t take advantage of one of the main benefits that Service Broker

provides. In particular, Service Broker guarantees that all messages are delivered exactly once,

in order, or the message sender is notified with a Service Broker error message. An application

that removes a message from the queue permanently, but fails to process the message as in

this example, breaks this guarantee. Without this guarantee, the application must contain

additional code to handle possible inconsistencies or run the risk of incorrect results.