What publically available tools are there for troubleshooting MSMQ problems?

Here's a list of utilities that you may want to familiarise yourself with before trying to resolve any MSMQ networking issues you encounter. Most of them are already well documented on TechNet so there isn't much for me to say except "I wish there were more!"

 

MSMQ Backup

The most important tool is MQBKUP.EXE so that if you can roll back any changes you make. This command-line utility (which comes with MSMQ) can backup and restore message storage files, log files, transaction log files, and registry settings. A full description is available in the following TechNet article: Backing up and restoring messages

 

Computer Management / Active Directory Users and Computers 

Both these snap-ins allow you to view the queues, messages and configurations of machines running MSMQ.

Note - in AD:U&C you will need to select "Users, Groups and Computers as containers" and "Advanced Features" from the View menu for the MSMQ object - and therefore the queues - to be visible.

Note - on a cluster, use MMCV.EXE to ensure you are looking at the queues of the MSMQ resource and not the local node.

898701 How to use the Mmcv.exe utility to manage clustered Message Queuing resources

 

Event Viewer

Check the application log for anything MSMQ wants to tell you about. The TechNet documentation for this is here: Monitoring Events.

 

Performance Monitor

There are three objects to look at:

  • MSMQ Queue (data on individual queues)
  • MSMQ Service (totals, rates, etc.)
  • MSMQ Session (only available when there is an active connection to the machine)

These are good for showing where messages have really gone, for example, or proving that messages are leaving a machine, and so on. The TechNet documentation for this is here: Monitoring Message Queuing performance

 

Diagnostics

This is a collection of three tools available in Active Directory Users and Computers. Open the Message Queuing Properties for the machine you wish to test and press the corresponding button on the Diagnostics tab.

MQPing

MQPing sends a normal MSMQ message labelled "QM-Admin Commands" and there will be a corresponding message returned to the sender labelled "Ping Response". There is an internal "MQPing response" queue but you can't see it (because people used to delete system queues when they were visible in earlier versions of MSMQ... ). The process waits 30 or 45 seconds (depending on O/S) for the round trip to complete before timing out. The TechNet documentation for this is here: Test connectivity using MQPing

Note - MQPIng is not available in workgroup mode.

Note - NOT to be confused with the MSMQ PING packet which is sent over UDP port 3527. Queue managers attempt to ping each other on this port before opening a session.

Note - You can also use MQPing in Computer Management but that would just send to yourself and may not be a useful test.

 

Send a Test Message

Pretty self-explanatory except that the the target queue must be a "test queue"; that is, a non-transactional public queue with a queue type ID set equal to {55EE8F33-CCE9-11CF-B108-0020AFD61CE9}. The TechNet documentation for this is here:

[[Edit July 3rd, 2008]] Note - enable this option first by setting EnableReportMessages.

 

Tracking

This option is only useful in enterprises where routing is used. That is, messages do not travel directly from sender to receiver but instead are routed through intermediary store-and-forward Routing Servers. Tracking allows you to see how well the routing is working by generating data for each hop. The TechNet documentation for this is here:

[[Edit July 3rd, 2008]] Note - enable this option first by setting EnableReportMessages.

 

Component Services 

MSMQ uses MSDTC for EXTERNAL transactions so the Component Services snap-in can be used to monitor them. The TechNet documentation for this is here: Monitoring transactional messages

 

TMQ

This suite of utilities generates reports on different aspects of the MSMQ configuration. There are currently three options available:

  • State (general health check)
  • Store (detailed analysis of the storage files)
  • Site (detailed analysis of the machine's MSMQ Active Directory configuration, both locally and on the domain controller)

Ideally you would run these at regular intervals to check for errors, and especially before/after changes are made to the machine, the network or the AD environment so you can see how well MSMQ responded. KnowledgeBase article 887220 Description of TMQTools utilities for Microsoft Message Queuing discusses the tool in more depth. The download point is here: TMQ State and TMQ Store Utilities for MSMQ

 

Internal Logging

Since Windows 2000, MSMQ has the ability to log its internal activity for PSS engineers to use in troubleshooting. In MSMQ 2.0, the output was stored in a text file although the information was rather limited. In MSMQ 3.0 and above, the system was changed and a binary file was created instead that needed to be sent to Microsoft for analysis. Chapter 15 of the MSMQ FAQ is dedicated to logging.

 

 

MQBench

This command line utility allows you to send to and receive from transactional or non-transactional queues. Performance data from the test can also be exported to Excel files for analysis. KnowledgeBase article 186194 MQBench.exe Measures Time to Deliver MSMQ Messages discusses the tool in more depth. The download point is here: MQBench Command-Line Utility

 

MSMQSend and MSMQRecv

The MSMQ-MQSeries Bridge comes with some sample utilities, called MSMQSend.exe and MSMQRecv.exe, which are pretty basic and just take a servername\queuename as an input parameter.

 

MSMQ Local Admin API

The sample files that can be downloaded with the Local Admin API documentation (242471 FILE: MSMQ Local Admin API) perform some useful operations

MQPurge

This utility can purge both incoming and outgoing queues. Purging an outgiong queue does not affect messages that have already been delivered to the corresponding destination queue.

MgmtAction

The MSMQ service can be disconnected from the network (that is, will stop sending and receiving messages) and outgoing queues paused with this utility. And obviously reconnected and resumed too!

MgmtInfo

Use this sample executable to find information about queues and machines

    • list all local “active” queues (which includes all open queues, queues with messages, and internal outgoing queues)
    • list all local private queues
    • whether machine has connectivity to the DS
    • installation type
    • for the specified queue, shows a variety of internal information, such as the next hop, number of messages, path name of the queue etc