Applies to: Exchange Server 2007 SP2, Exchange Server 2007 SP1
Topic Last Modified: 2009-05-20

Priority queuing is a feature in Microsoft Exchange Server 2007 Service Pack 1 (SP1) and Exchange 2007 Service Pack 2 (SP2) that enables the sender-defined priority of a message to influence the processing of the message by an Exchange server that has the Hub Transport server role installed.

The message priority is assigned by the sender in Microsoft Outlook when the sender creates and sends the message. The sender can set any of the following message priority values in Outlook:

The default priority for a message that is created in Outlook or Microsoft Outlook Web Access is Normal priority. The message priority is stored in the X-Priority: header field in the message header.

Every message that is sent or received in an Exchange 2007 organization must be categorized on a Hub Transport server before it can be routed and delivered. The categorizer on a Hub Transport server picks up one message at a time from the Submission queue and performs recipient resolution, routing resolution, and content conversion on the message before putting the message in a delivery queue. For more information, see Transport Architecture.

Delivery queues are dynamically created based on the destination of a message. Mailbox delivery queues are created for messages that are destined for Mailbox servers that exist in the same Active Directory directory service site as the Hub Transport server. Remote delivery queues are created for messages that are destined for Mailbox servers that exist in a different Active Directory site than the Hub Transport server, and for remote domains. For more information, see Managing Queues.

All messages that have the same destination are put in the same delivery queue. Priority queuing affects the transmission of messages from a delivery queue to the destination messaging server. When priority queuing is enabled, High priority messages are transmitted to their destinations before Normal priority messages, and Normal priority messages are transmitted to their destinations before Low priority messages. The prioritized delivery of messages based on the message priority can help administrators define specific service level agreement (SLA) requirements for message delivery times.

Options for Configuring Priority Queuing

All configuration options for priority queuing are available in the EdgeTransport.exe.config application configuration file that is located in the C:\Program Files\Microsoft\Exchange Server\Bin directory. The EdgeTransport.exe.config file is an XML application configuration file that is associated with the EdgeTransport.exe file. EdgeTransport.exe and MSExchangeTransport.exe are the executable files that are used by the Microsoft Exchange Transport service. This service runs on every Hub Transport server or Edge Transport server. Changes that are saved to the EdgeTransport.exe.config file are applied after the Microsoft Exchange Transport service is restarted. The default value is enforced if either of the following conditions is true:

  • A configuration option is missing.

  • A configuration option is present and contains the default value.

The following example shows the typical structure of the EdgeTransport.exe.config file:

<configuration>

<runtime>

<gcServer enabled="true" />

</runtime>

<appSettings>

<add key=" Configuration Option " value=" Value " />

...

</appSettings>

</configuration>

You can add new configuration options or modify existing configuration options in the <appSettings> section. Many configuration options available are completely unrelated to priority queuing. Any configuration options that don't involve back pressure are outside the scope of this topic.

Enabling or Disabling Priority Queuing

The PriorityQueuingEnable parameter enables or disables priority queuing on a Hub Transport server. The default value is False. To enable priority queuing, set the PriorityQueuingEnable parameter value to True in the EdgeTransport.exe.config file and restart the Microsoft Exchange Transport service.

Configuring the Maximum Size of a High Priority Message

The MaxHighPriorityMessageSize parameter controls the maximum allowed size of a High priority message. The default value is 250 KB. If a High priority message is larger than the value of MaxHighPriorityMessageSize parameter, the message is automatically downgraded from High priority to Normal priority.

When you enter a value, qualify the value with one of the following units:

  • KB (kilobytes)

  • MB (megabytes)

  • GB (gigabytes)

The value of the MaxHighPriorityMessageSize parameter should be significantly less than the value of the MaxMessageSize parameter on the Set-TransportConfig cmdlet. The default value of the MaxMessageSize parameter is 10 MB. A smaller value of MaxHighPriorityMessageSize helps make sure of consistent and predictable delivery times for High priority messages.

Configuring the Delay Notification Time-Out Based on the Message Priority

After each message delivery failure, the Hub Transport server generates a delay delivery status notification (DSN) message and queues it for delivery to the sender of the undeliverable message. This delay DSN message is sent only after a specified delay notification time-out interval, and only if the failed message wasn't successfully delivered during that time. This delay prevents the sending of unnecessary delay DSN messages that may be caused by temporary message transmission failures.

The following table shows the delay DSN notification time-out options that are based on the message priority.

Delay DSN notification time-out options that are based on the message priority

Parameter name Default value

LowPriorityDelayNotificationTimeout

8:00:00 (8 hours)

NormalPriorityDelayNotificationTimeout

4:00:00 (4 Hours)

HighPriorityDelayNotificationTimeout

00:30:00 (30 minutes)

To specify a value for a delay notification time-out, enter the value as a time span: dd.hh:mm:ss, where d = days, h = hours, m = minutes, and s = seconds. If the value is less than 1 day, you can omit the day part of the time span.

A message transmission failure is considered temporary if the message is subsequently delivered successfully within a specific period of time. This period is defined as the product of the values of the TransientFailureRetryCount and TransientFailureRetryInterval parameters of the Hub Transport server. These parameters are configured using the Set-TransportServer cmdlet. If the message is successfully delivered within this period, the message transmission failure is considered temporary. To ensure that delay DSNs are not sent for temporary failures, the values of both NormalPriorityDelayNotificationTimeout and HighPriorityDelayNotificationTimeout options should always be greater than the value of TransientFailureRetryCount multiplied by TransientFailureRetryInterval.

Configuring the Message Expiration Time-Out Based on the Message Priority

The message expiration time-out specifies the maximum length of time that a Hub Transport server tries to deliver a failed message. If the message cannot be successfully delivered before the expiration time-out interval has passed, a non-delivery report (NDR) that contains the original message or the message headers is delivered to the sender.

The following table shows the message expiration time-out options that are based on the message priority.

Message expiration time-out options that are based on the message priority

Parameter name Default value

LowPriorityMessageExpirationTimeout

2.00:00:00 (2 days)

NormalPriorityMessageExpirationTimeout

2.00:00:00 (2 days)

HighPriorityMessageExpirationTimeout

8:00:00 (8 hours)

To specify a value for a message expiration time-out, enter the value as a time span: dd.hh:mm:ss, where d = days, h = hours, m = minutes, and s = seconds. If the value is less than 1 day, you can omit the day part of the time span.

Configuring the Maximum Number of Connections Per Domain Based on the Message Priority

The maximum number of connections per domain specifies the maximum number of connections that a Hub Transport server can have open to any single remote domain. The outgoing connections to remote domains occur by using the remote delivery queues and Send connectors that exist on the Hub Transport server.

The following table shows the maximum number of connections per domain options that are based on the message priority.

Maximum number of connections per domain options that are based on the message priority

Parameter name Default value

MaxPerDomainLowPriorityConnections

2

MaxPerDomainNormalPriorityConnections

15

MaxPerDomainHighPriorityConnections

3

The sum of the MaxPerDomainLowPriorityConnections parameter, the MaxPerDomainNormalPriorityConnections parameter, and the MaxPerDomainHighPriorityConnections parameter should be less than or equal to the value of the MaxPerDomainOutboundConnections parameter on the Set-TransportServer cmdlet. The default value of the MaxPerDomainOutboundConnections parameter is 20.

How Priority Queuing Affects Other Message Limits on Hub Transport Servers

All messages that pass through a Hub Transport server are subject to a variety of message retry, resubmit, and expiration limits. For more information, see Managing Message Retry, Resubmit, and Expiration Intervals.

Some message limits that are available in the Set-TransportServer cmdlet have corresponding priority queuing message limits that are available in the EdgeTransport.exe.config configuration file. The following table shows these corresponding message limits.

Message limits in the Set-TransportServer cmdlet that correspond to priority queuing message limits in the EdgeTransport.exe.config configuration file

Source Parameter Default value

Set-TransportServer

DelayNotificationTimeOut

4:00:00 (4 hours)

EdgeTransport.exe.config

NormalPriorityDelayNotificationTimeout

4:00:00 (4 Hours)

Set-TransportServer

MessageExpirationTimeOut

2.00:00:00 (2 days)

EdgeTransport.exe.config

NormalPriorityMessageExpirationTimeout

2.00:00:00 (2 days)

When priority queuing is disabled, all the priority queuing message limits that exist in the EdgeTransport.exe.config configuration file are ignored. All the message limits on the Set-TransportServer cmdlet apply to all messages that travel through the Hub Transport server.

When priority queuing is enabled, the priority queuing message limits in the EdgeTransport.exe.config configuration file override the corresponding message limits in the Set-TransportServer cmdlet. All other message limits in the Set-TransportServer cmdlet still apply to Low priority, Normal priority, and High priority messages that travel through the Hub Transport server.

User Settings for Priority Queuing

The Set-Mailbox cmdlet in the Exchange Management Shell has the DowngradeHighPriorityMessagesEnabled parameter. The default value is False. When this parameter is set to True, any High priority messages that are sent from the mailbox are automatically downgraded to Normal priority. For more information, see Set-Mailbox.