We have a requirement where there is need to implement queuing so that we can control concurrency and not overload the database. From Microsoft world we have chosen to use MSMQ to store the requests. Planning to create 100s of queues (1 for each customer) and process the queues in parallel to achieve maximum concurrency.
Our main design goal is to allow only one call per customer/queue at a time and process each customer independently.
We are stuck on choosing the right technology to process the queues. There are two.
Create a .NET windows service and process multiple queues using the queue object event ReceiveCompleted. Here we have the option to attach same method to multiple queues. Need to add custom concurrency code for single queue using some sync lock. Reference1
Have multiple WCF services with WAS to process each queue (same copy for different queues; change in queue name only) and implement throttling to limit concurrency per service. Looks like only one queue can be processed by a WCF service. Reference2
Which is the one do you would suggest? Is there a better way? Please help us!!!