For a while now there's been some, at times quite vociferous, discussion between members of Microsoft's MSMQ ninjas about the impact of the latest change in the MSMQ message format. I say "latest" as the data structure has become more complicated with each new operating system release. If you look at the full list of MSMQ message properties here you will see what has been added:
Windows XP and 2003
Windows Vista and 2008
Now, considering that the total message size is fixed, you can see that over time there is going to be less and less space available for the payload. We are, though, only talking about losing 10s, maybe 100s, of bytes in some cases on a 4MB message which doesn't seem much to worry about as most implementations don't send such large messages.
For those that do, though, these changes can mean applications are unable to deliver MSMQ messages after an upgrade of the destination machine and this is discussed in a recent KB article:
936501 A Message Queuing client that is running a version of Windows that is earlier than Windows Vista cannot send a message to a Message Queuing 4.0 server
This only talks about Windows Vista/2008 but the principle is applicable to earlier operating systems and some application vendors have encountered the problem in the past and already allowed for it in their designs.
The difference with MSMQ 4.0 is that the service reports the problem. Earlier versions would just silently reject the delivery which would leave an outgoing queue continually trying to deliver a poison message.
The options are as follows:
Note: the new NACK class does not appear until Windows Vista service pack 1 or Windows Server 2008. Anyone encountering this problem on the current version of Windows Vista (or an older operating system) should use the second or third approaches.
Note: Dead Lettering is turned off by default.