体系结构队列asp.NET-MSMQ
问题:大约300名考生使用Flex进行测试。一次测试包括大约100个练习。每次练习后,都会调用.NET服务来存储结果。如果考生完成了一项测试,他/她的所有测试数据都将通过Asp.NET进行非规范化。这种非规范化可能需要一些cpu,可能需要5到10秒。现在,大多数情况下,一些考生比其他考生提前完成考试,但仍有大约200人等待考试结束。在那一刻,200名考生完成了测试,同时200节课被反规范化。此时,服务器负载(cpu)过高,导致对Web服务器的调用出错。现在,我想使用MSMQ将它们添加到队列中,而不是同时规范化所有这些会话 问题:体系结构队列asp.NET-MSMQ,asp.net,msmq,Asp.net,Msmq,问题:大约300名考生使用Flex进行测试。一次测试包括大约100个练习。每次练习后,都会调用.NET服务来存储结果。如果考生完成了一项测试,他/她的所有测试数据都将通过Asp.NET进行非规范化。这种非规范化可能需要一些cpu,可能需要5到10秒。现在,大多数情况下,一些考生比其他考生提前完成考试,但仍有大约200人等待考试结束。在那一刻,200名考生完成了测试,同时200节课被反规范化。此时,服务器负载(cpu)过高,导致对Web服务器的调用出错。现在,我想使用MSMQ将它们添加到队列中,而
- 如何处理队列
- 是否在global.asax的应用程序_start中启动侦听队列的单独线程?如果有消息,则一次处理一条消息
- 是否需要在单独的线程中执行此操作?如果在global.asax中,您只调用一个开始侦听队列的单例呢?此单例将在哪个线程中运行?(调用global.asax的线程是什么)
- 实现这一点的最佳实践是什么?链接?资源?教程?例子
- 我不喜欢这个主意,但是你能在你的网站的根上放一个exe吗,一个启动进程监听队列的exe
- 如果您从队列中获取消息,那么您是在拉出消息时将其删除,还是在此会话的非规范化成功时将其删除?如果你把它拔出来的时候把它取了出来,结果出了问题
- 我也可以在内存中创建自己的队列,但是重新启动Web服务器会清空队列,很多会话最终无法正常化,所以我想这真的是个坏主意。
- MSMQ是一个好的选择还是有更好的选择
- 如何处理队列
- 是否在应用程序\u start of global.asax中启动单独的线程 听队列的那个?如果有消息,则一次处理一条消息 时间
- 是否需要在单独的线程中执行此操作?如果在 例如,您只需调用一个开始侦听 排队?此单例将在哪个线程中运行?(那条线是什么 呼叫global.asax)
- 我不喜欢这个主意,但是你能在你网站的根目录上放一个exe吗?一个exe,它>启动一个进程来监听队列
- 如果您从队列中获取消息,是否在拉取消息时将其删除 如果此会话的非规范化已完成,请将其删除或删除 成功的如果你把它拿出来,有东西掉了 错了
- 实现这一点的最佳实践是什么?链接?资源?教程?例子
并且提供了很多很好的链接(包括他容易找到的侧栏“MSMQ文档”中的链接)。我个人使用servicebus实现类似的场景。我知道这听起来有些过分,但我认为.net servicebusses非常好,它们需要您编写的代码最少,因为要为后台进程创建一个好的调度程序而不干扰webapp运行的应用程序池的线程是不容易的。NServicebus和MassTransit对于您的场景来说都是很好的服务总线。有了servicebus,您就有了一个框架,可以在messagequeue连接的多个应用程序中写入msmq并侦听msmq。通过该总线,您可以轻松创建单独的应用程序,该应用程序作为后台服务运行,并通过消息队列与您的web应用程序连接。当您使用topself(包括在nservicebus和masstransit中)时,服务总线会自动生成用于单独应用程序的安装程序/卸载程序
问题:为什么您不喜欢使用单独的exe?“服务器负载(cpu)太高,导致对Web服务器的调用出错”-错误是什么?您是否认为您可以减少正常化所需的时间?对我来说似乎有点高…这真的没关系,因为200个会话被非规范化了,对服务器的调用慢了很多。如果您想知道错误,请查看以下内容:。我还没有真正弄清这件事的真相。似乎这也可能是flex中的一个bug。另一方面,它只会在很多会话同时完成时出错。是的,我们也在考虑缩短正常化的时间。问题是我们将练习(内容)存储在xml中,所以需要将该xml反序列化为对象。我们已经添加了缓存,所以通常它应该已经运行得更快了。但仍然有很多数据需要去规范化。你不觉得排队更好吗?我想负载会分布得更好(不知道这是不是英语)。