Share via


Source journaling

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

Source journaling

Source journaling is the process of storing copies of outgoing messages on the source computer. It is configured on a per-message basis and is a property that is set programmatically by a Message Queuing application. Source journaling allows you to track the messages sent by a computer, and can be used to track messages that were sent successfully, messages that could not be delivered, or both. Source journaling is disabled by default.

There are two types of sources journaling, positive source journaling and negative source journaling.

Positive source journaling

You can track messages that were successfully sent by the local computer, so that when you send the message to remote destination queues, a copy of the message is placed in the source computer's journal if the message is sent successfully. This is known as positive source journaling. Note that this does not mean the message has successfully reached its destination queues, only that the local computer was able to send the message.

When messages are sent to local destination queues, the message can be placed in one of two journal queues:

  • If the local destination queue has not enabled target journaling, a copy of the message is saved to the computer's journal queue only after the message has been removed from the local destination queue. This is the default setting.

  • If the local destination queue has enabled target journaling, a copy of the message is saved to the queue's journal after the message is removed from the queue. The message is not, in this case, stored in the computer's journal queue. Message Queuing never stores more than one copy of a message on a single computer at one time.

Negative source journaling

You can track messages that were not delivered. This type of journaling is known as negative source journaling. When you specify this type of source journaling, Message Queuing reacts differently depending on the type of message you send:

  • For nontransactional messages, a copy of the message is placed in the dead-letter queue of any computer that cannot deliver the message. This can be the source computer, or any routing server used to pass the message on to its destination. Failure indicates that the source queue manager on the computer cannot pass the message to the next hop.

  • For transactional messages, a copy of the message is placed in the transactional dead-letter queue of the source computer only if Message Queuing does not confirm that the message was retrieved from its destination queue.

Source journaling for transactional messages

For transactional messages sent to transactional queues, journaling can be applied by setting the journal property of a transactional message. The following property values can be set programmatically:

  • The default value. Source journaling is disabled. Message Queuing does not store copies of the message in the computer journal on success nor in the applicable dead-letter queue on failure.

  • Negative source journaling is requested. The message is stored in the applicable dead-letter queue on failure, but no copy is stored in the source computer journal on success.

  • Positive source journaling is requested. A copy of the message is stored in the source computer journal if the message was successfully delivered to the target computer, but no copy is stored in the applicable dead-letter queue on failure.

  • Both negative source journaling and positive source journaling are requested. Copies of the message are stored in the source computer journal on success and in the applicable dead-letter queue on failure. This is the recommended setting.

Differences in source journaling for transactional messages between MSMQ 1.0 and later versions

MSMQ 1.0 treated source journaling for transactional messaging differently than MSMQ 2.0 and Message Queuing 3.0. MSMQ 1.0 only allows you to specify positive source journaling to choose if you want to save copies of messages sent successfully. MSMQ 1.0 always uses negative source journaling, and places a copy of a non-confirmed transactional message in the transactional dead-letter queue.

MSMQ 2.0 and later versions allow complete control over source journaling. (If you are running MSMQ 1.0 applications on an MSMQ 2.0 computer, you can force the computer to use the MSMQ 1.0 semantics by setting the XactDeadLetterAlways registry entry to 1. After setting the registry, restart the Message Queuing service for the changes to take effect.

Caution

  • Incorrectly editing the registry may severely damage your system. It is recommended that you back up any valuable data on the computer before making changes to the registry.

Managing source journals

When you store messages in a journal or dead-letter queue, clear these queues periodically to remove messages that are no longer needed. Messages stored in journal and dead-letter queues count against the quota for the computer where the queues reside (the computer quota is set by the administrator).

When source journaling is enabled, a copy of the outgoing message is placed in the single computer journal of the source computer, which is listed as the Journal messages queue in the System Queues folder in Computer Management and Active Directory Users and Computers. This occurs either when the message arrives at the computer hosting the destination queue or when the message reaches a Message Queuing routing server that is one hop closer to the target computer. A Message Queuing server that routes messages for clients does not store copies of those messages in its computer journal.

Outgoing messages sent by dependent clients are placed in the computer journal on the supporting Message Queuing server.