架构排队asp.NET - MSMQ

Lie*_*oen 6 asp.net msmq

问题:大约300名候选人使用Flex进行测试.测试包括大约100个练习.每次练习后,都会调用.NET服务来存储结果.如果候选人完成测试,他/她的测试的所有数据都被Asp.NET非规范化.这种非规范化可能需要一些cpu,可能需要5到10秒.现在,大多数时候,一些候选人比其他人更早完成了测试,但仍有大约200人等到他们的时间到了.在那一刻,200名候选人完成了他们的考试,200名会议同时被非正规化.此时,服务器负载(cpu)太高并导致调用Web服务器出错.现在,我不想同时对所有这些会话进行规范化,而是希望使用MSMQ将它们添加到队列中.

题:

  • 你如何处理队列?
  • 您是否在global.asax的Application_Start中启动一个单独的线程来侦听队列?如果有消息,那么它们就会被发送一个消息.
  • 是否有必要在单独的线程中执行此操作?如果在global.asax中你只是调用一个单例来开始监听队列怎么办?这个单身人士会在哪个线程中运行?(调用global.asax的线程是什么)
  • 实现此目的的最佳实践是什么?链接?资源?教程?例子?
  • 我不喜欢这个想法,但是你可以在你的网站的根目录上放一个exe,一个启动进程监听队列的exe ...
  • 如果您从队列中收到消息,那么在拔出它时是删除它还是如果此会话的非规范化成功将其删除?如果你拔出它时出现问题......
  • 我也可以在内存中创建自己的队列,但重新启动网络服务器会清空队列,很多会话最终都没有正常化,所以我想这真是一个坏主意.
    • MSMQ是一个不错的选择还是有更好的选择?

Fil*_*urt 4

您可以考虑使用带有 MSMQ 传输的 WCF 服务。我在计算佣金的应用程序中使用了这种方法:

用户完成 asp.net 向导配置计算参数 计算作业使用 MSMQ 传输发送到 WCF 服务 作业进入 MSMQ 后服务事务立即完成 创建新的事务范围用于处理作业实例

一个缺点是事务需要 MSDTC,这会在针对 MS SQL Server 时增加一些开销,在处理 Oracle 时甚至会增加更多开销。

IDesign 提供了大量有关WCF 队列的有用示例和最佳实践。