MSMQ and IPv6

As IPv6 becomes more prevalent in your environments, you'll need to make sure that you are running MSMQ systems that can actually cope with the new IP addresses.

There are (at least) three issues to watch out for.

  1. The addressing of messages is not as simple.
    For example, an old school address of

    DIRECT=TCP:10.32.55.123\PRIVATE$\queuename

    would become

    DIRECT=TCP:[2001:4898:2a:1005:230:48ff:fe73:989d]\PRIVATE$\queuename

    Notice the use of square brackets.

  2. Not all operating systems can work with IPv6 out of the box. Windows Vista and Windows Server 2008 are both fine but Windows Server 2003 has IPv6 disabled by default. Although you can enable IPv6, MSMQ 3.0 (that comes with Windows Server 2003) will still only be listening on the IPv4 IP address. In that situation, any MSMQ 4.0 machines will not be able to send messages to an MSMQ 3.0 destination using IPv6 addresses.

  3. On a Windows Server 2008 cluster you may find MSMQ is only listening on an IPv6 address even though there is an additional IPv4 address configured. This is down to the slightly different times taken for each IP address to become registered in DNS. MSMQ will only listen on the IP addresses that are returned when it queries DNS for the network name being used. IPv6 addresses are slightly faster than IPv4 addresses to initialise and so are more likely to be in DNS when MSMQ comes looking.

    Workarounds:

    • Don't use IPv6 addresses if you don't need them yet

    • Recycle the MSMQ resource to force DNS to be queried (all addresses will have been registered in DNS by then)

    • Change the Dependencies for the Network Name used by MSMQ from "<IPv6 address> OR <IPv4 address>" to "<IPv6 address> AND <IPv4 address>". The "OR" logic means the network name resource - and therefore MSMQ - comes on line when either of the addresses has initialised; the "AND" logic requires both addresses to be ready before the network name resource can come on line, giving more time for the DNS updates to complete.

Do check the event log first, though, as there may be some other explanation:

    • MSMQ Event 2197 "Message Queuing failed to listen on the IPv6 protocol. Messages will not be accepted on IPv6. <error code>"

    • MSMQ Event 2198 "Message Queuing failed to listen on the IPv4 protocol. Messages will not be accepted on IPv4. <error code>"

Reference

Windows Server 2003 IPv6