In today’s short post I would like to present you three tools that I use frequently in diagnosing services that use MS Message Queues. These are:
- MessageDumper – downloads and removes messages from queue
- MessagePeeker – downloads but does not remove messages from queue
- MessagePusher – sends collected messages to a given queue
MessageDumper and MessagePeeker gather messages in batches, storing each batch in a separate file. The size of the batch and the number of files is configurable from the command line. Output files can be then processed by MessagePusher and send to a different queue, for example on a developer’s machine.
Case of diagnostics
Imagine you have a production Windows Service that processes statistics. Statistics are generated by web applications on people actions and sent to your service using MS Message Queues (let’s assume the service queue is private and its name is LowLevelDesign.Stats). Some day you observe that for a specific set of statistics messages your service breaks. In order to debug the issue locally you need those messages. You may then ask your admin to stop the service, wait for the statistics to come and run:
MessagePeeker -q .\private$\LowLevelDesign.Stats -o brokenset
This command should generate 2 files on output: brokenset.headers and brokenset.1. The first one is a header file which contains information about messages stored in other files. Copy the generated files to your local machine and run:
MessagePusher -q .\private$\LowLevelDesign.Local.Stats -i brokenset
and all the saved messages will be sent to your local queue. As said previously when you have many messages to process you may gather them in batches. The presented tools are available for download on my .NET Diagnostics Toolkit page.