0

我们有一个需求,需要实现排队,这样我们就可以控制并发而不会使数据库过载。在 Microsoft 世界中,我们选择使用 MSMQ 来存储请求。计划创建 100 个队列(每个客户 1 个)并并行处理队列以实现最大并发。

我们的主要设计目标是一次只允许每个客户/队列一次呼叫,并独立处理每个客户。

我们坚持选择正确的技术来处理队列。那里有两个。

  1. 创建一个 .NET windows 服务并使用队列对象事件ReceiveCompleted处理多个队列。在这里,我们可以选择将相同的方法附加到多个队列。需要使用一些同步锁为单个队列添加自定义并发代码。参考文献1

  2. 使用 WAS 拥有多个 WCF 服务来处理每个队列(不同队列的相同副本;仅更改队列名称)并实施节流以限制每个服务的并发性。看起来 WCF 服务只能处理一个队列。 参考文献2

你会建议哪一个?有没有更好的办法?请帮助我们!!!

4

1 回答 1

0

您的选项 #1 更简单、更直接。如果您遵循与引用的 MSDN 链接中的代码相同的模式,它也应该表现良好。它使用将由工作线程池提供服务的异步 MSMQ 调用。这消除了不断轮询队列以获取新到达消息的需要,并导致空闲队列的计算开销基本上为零。

确保每个队列一次处理的消息不超过一条也很容易。在您完成对该队列上一条消息的处理之前,不要在任何消息队列上调用 Queue.BeginReceive()。无需自定义并发代码。

于 2013-06-22T14:59:38.903 回答