Digging into MSMQ
Join the DZone community and get the full member experience.
Join For FreeI got into a discussion online about MSMQ and its performance. So I decided to test things out.
What I want to do is to check a few things, in particular, how much messages can I push to and from MSMQ in various configurations.
I created a non transactional queue, and then I run the following code:
var sp = Stopwatch.StartNew(); int count = 0; while (sp.Elapsed.TotalSeconds < 10) { var message = new Message { BodyStream = new MemoryStream(data) }; queue.Send(message); count++; } Console.WriteLine(sp.Elapsed); Console.WriteLine(count);
This gives me 181,832 messages in 10 seconds ,or 18,183 messages per second. I tried doing the same in a multi threaded fashion, with 8 threads writing to MSMQ, and got an insufficient resources error, so we’ll do this all in a single threaded tests.
Next, the exact same code, but for the Send line, which now looks like this:
queue.Send(message, MessageQueueTransactionType.Single);
This gives me 43,967 messages in 10 seconds, or 4,396 messages per second.
Next I added DTC, which gave me a total of 8,700 messages in ten seconds, or 870 messages per second! Yeah, DTC is evil.
Now, how about reading from it? I used the following code for that:
while (true) { try { Message receive = queue.Receive(TimeSpan.Zero); receive.BodyStream.Read(data, 0, data.Length); } catch (MessageQueueException e) { Console.WriteLine(e); break; } }
Reading from transactional queue, we get 5,955 messages per second for 100,000 messages. And using non transaction queue it can read about 16,000 messages a second.
Note that those are pretty piss poor “benchmarks”, they are intended more to give you a feel for the numbers than anything else. I’ve mostly used MSMQ within the context of DTC, and it really hit the performance hard.
Published at DZone with permission of Oren Eini, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Trending
-
Unlocking the Power of AIOps: Enhancing DevOps With Intelligent Automation for Optimized IT Operations
-
Competing Consumers With Spring Boot and Hazelcast
-
Mastering Time Series Analysis: Techniques, Models, and Strategies
-
Microservices Decoded: Unraveling the Benefits, Challenges, and Best Practices for APIs
Comments