- I used to do the hard way which is creating another queue which is bound to the same exchange with same parameters, routing keys. Then consume from that queue and count the message in 5 minutes, 15 minutes, 1 hour etc.
- I've just got another idea which is more simple. The solution is similar to the first approach, but you apply "Message TTL" parameter when creating the queue. So you will have to create 3 queues with Message TTL to 5 minutes, 15 minutes, 1 hour. At any point, the total messages in each queue is the actual number you want. And with latest Burrow.NET (From 1.0.17) you can actually count the message in the queue this way:
ITunnel tunnel = RabbitTunnel.Factory.Create(); // Set routeFinder if you have custom routefinder var messageCount = tunnel.GetMessageCount<YourMessageType>(""); //Or if you want to count all the messages in priority queues: ushort maxLevel = 5; ITunnel tunnel = RabbitTunnel.Factory.WithPrioritySupport() .Create().WithPrioritySupport(); // Set routeFinder if you have custom routefinder var messageCount = tunnel.GetMessageCount<YourMessageType>("", maxLevel);
Cheers
1 comments:
Hi Van,
Thanks for the post.
Another possibility is using the EasyNetQ Management plugin ...
https://github.com/mikehadlow/EasyNetQ/wiki/Management-API-Introduction
Regards,
James
Post a Comment