“Why do transactional messages all have the same priority?”

Posted by John Breakwell on Geeks with Blogs See other posts from Geeks with Blogs or by John Breakwell
Published on Thu, 03 Feb 2011 02:20:55 GMT Indexed on 2011/02/03 7:26 UTC
Read the original article Hit count: 183

Filed under:

I answered this question on the MSMQ forum on MSDN and thought it worth sharing here.

The poster wanted to know why all transactional messages have a fixed priority of zero (instead of 0 through 7). They wanted the guaranteed delivery of messages to a queue but wanted to assign different levels of priority.

Some aspects of MSMQ were defined way back in the last century and this is one of them. If I remember right, the reason was to avoid the following scenario:

  • You have a single transaction of 3 messages (a, b and c) with priorities 5, 3 and 4 respectively.
  • The messages are sent in order a,b,c
  • The messages arrive in the queue and are arranged in order a,c,b to reflect priority order
  • This breaks the guaranteed order part of the transaction. 

I know that very few people send more than one message in a transaction but that is a scenario that MSMQ has to be able to handle; for the majority, including yourself, this scenario is irrelevant which is why you are surprised by the absence of transactional priorities.

The options, therefore, available to the Microsoft developers were to:

  1. Implement code that allowed you to send messages with variable priority as long as any messages within the same transaction were the same priority,
    or
  2. Define a set priority for all transactional messages

As you can understand, option 1 would be a complicated arrangement with all the necessary enforcement, error handling, user education and documentation, etc.

Sure, it would have been possible to implement option 1 but I expect the product group decided to invest the development time in some other aspect of MSMQ. Now, with five versions out there, it would be confusing to change how the product operates, in addition to potentially breaking exisiting systems that have been working fine for years. So, balancing cost and risk against customer demand, I would not expect this feature to ever change.

© Geeks with Blogs or respective owner