【问题标题】:Queuing Web request before passing into web service在传递到 Web 服务之前排队 Web 请求
【发布时间】:2012-12-12 00:30:07
【问题描述】:

我有在线评估应用程序,其中在登录和提交测试期间有大量点击,当 CPU 使用率为 100% 时服务器无法处理所有请求并且许多请求全部丢失,我想将所有请求排队并发送一个有时是内部的,因此请求不应丢失并在服务器后端处理所有请求

【问题讨论】:

  • 我使用过asp.net C#4.0
  • 也许考虑使用消息队列系统?这样您就不会丢失任何请求。
  • @Fuji 我可以发送请求而不管之前的请求是否完全执行,在某些时候内部使用消息队列系统吗?

标签: asp.net multithreading c#-4.0 queue msmq


【解决方案1】:

我认为您的问题是您正在处理两种截然不同的请求 - 登录和考试结果,并且您正试图通过同一渠道处理它们。

这两个请求有非常不同的特点:

  • 登录请求很小
  • 考试成绩要求很大
  • 登录请求必须是实时的
  • 考试成绩请求不需要实时处理
  • 登录请求涉及用户和安全(从业务角度)
  • 考试要求处理问题和答案(从业务角度)

从逻辑上讲,它们是如此不同,以至于您在单个频道中拥有的是两种不同的服务(即使目前它们是捆绑在一起的)。他们几乎没有共同点。

我会认真考虑将单个通道分成两个通道,并在两个不同的服务器上理想地运行它们。此外,我会将入站队列添加到考试结果通道。这会有很多好处:

  1. 登录请求将不太可能超时,因为您已经消除了同时处理考试结果的可能性。
  2. 考试结果请求的自然限制(通过队列)。
  3. 解耦两个服务之间的依赖关系。
  4. 更高的系统稳定性、更低的支持成本和更低的拥有成本。

因为您的服务是如此不同,这将使您更容易做到这一点。您应该能够毫不费力地分离代码库。您可以使用 MSMQ(可能通过 WCF netMsmqBinding)来处理请求的排队。

希望对你有所帮助。

【讨论】:

  • 谢谢休,我的一些主机在 IIS 6.0 上,并且 MSMQ 是否会受到 IIS 6.0 的支持?当通过搜索 MSMQ 从 IIS 7.0 开始支持时,我可以实现 MSMQ 的任何可能方式在 IIS 6.0 中?
  • 嗨 Haneep - 不确定是否支持 IIS6。但是,我从来没有在 IIS 中托管 msmq - 尽管可以通过 WAS,但我只是不喜欢它作为解决方案。您可以在 windows 服务中托管 msmq 服务,队列地址将保持不变,这将简化您的 wen 部署。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 2011-10-06
  • 2011-01-21
  • 2011-02-25
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多