使用数据库或MSMQ排队?

Lie*_*oen 5 sql-server asp.net queue msmq message-queue

我正在研究的应用程序的一部分是一个swf,它显示了一个包含80个问题的测试.每个问题都通过WebORB和ASP.NET保存在SQL Server中.

如果候选人完成测试,则需要验证会话.问题是有时350名候选人在同一时间完成测试,并且Web服务器和SQL Server上的CPU爆炸(同时进行350次验证).

现在,我该如何在这里实施排队?在数据库中,有一个表,其中包含每个会话的记录.一栏保持状态.1完成,2验证.

我可以通过两种方式实现排队(正如我所看到的,也许你有其他命题):

  • 检查表中状态为1的记录的进程.如果找到,则验证会话.因此,会话一个接一个地验证.
  • 如果候选者完成其会话,则将消息发送到MSMQ队列.另一个进程侦听队列并逐个验证会话.

现在:

  • 什么是最好的方法?
  • 您从哪里开始验证会话的过程?在你的global.asax(application_start)中?作为Windows服务?作为在application_start中启动的网站的根目录下的exe?

对我来说,使用表格并查找状态为1的记录似乎是最简单的方法.

Dan*_*llo 4

MSMQ 方法将面向 Web 的应用程序与验证逻辑服务和数据库分离。

这带来了许多优点,其中一些:

  • 如果验证逻辑每秒可以处理 5 个会话,并且一次接收 300 个会话,那么处理这种情况会更容易。否则你将不得不处理复杂的超时、重新尝试等。

  • 对验证服务进行维护会更容易,而不必中断应用程序的其余部分。当验证服务关闭时,消息将在 MSMQ 中排队,并在启动后立即再次得到处理。

  • 数据库维护同上。