【问题标题】:Asp.Net - Offload processing to external applicationAsp.Net - 将处理卸载到外部应用程序
【发布时间】:2013-01-09 19:57:10
【问题描述】:

我有一个使用 3rd 方 exe 处理请求的 asp.net 网站。目前我的工作流程是

  1. 用户使用任何浏览器访问网站并填写一份包含工作详细信息的表格

  2. 网站调用 WCF 自托管 Windows 服务,该服务正在侦听端口

  3. Windows 服务启动 3rd 方 exe 来处理作业并将结果返回到网站

  4. 网站将返回的结果展示给用户

上述网站是一个原型,现在需要转变为可用于生产的部署。我意识到上述架构有很多可能会破坏的点。例如,如果机器关机或者windows服务崩溃并且不再监听端口,所有当前请求将停止处理。为了使架构更加健壮,我正在考虑以下

  1. 用户使用任何浏览器访问网站并填写一份包含工作详细信息的表格

  2. 网站将工作详细信息写入数据库

  3. 每 10 秒轮询一次数据库以获取新作业的 Windows 服务会选择该作业并使用第 3 方应用程序执行它。结果被写回数据库。

  4. 现在已经开始轮询数据库、获取结果并将其显示给用户的网站。

第二种架构为我提供了更多的日志记录功能,并且如果它们在队列中,它们可以重新开始。然而,它涉及大量可能不可扩展的轮询。谁能推荐一个更好的架构?

【问题讨论】:

  • 我们为类似的需求做过 POC,我们在第 2 步考虑了 MSMQ,但没有在项目中实现。期待这个有趣的实现的答案..
  • @Sundeep - 您最终为您的项目使用了 MSMQ 的替代品吗?项目已完成还是仍在进行中?谢谢
  • 很久以前,应用程序做一些后端处理并向用户发送通知电子邮件。所以,想替换它以进行即时处理。
  • 如果你真的希望它健壮,那么你应该直接使用 MSMQ,或者使用依赖于 MSMQ 的 WCF 绑定之一。不要重新发明轮子,尤其是重要的时候。
  • 我已经使用了 MQSeries(但 MSMQ 是相同的原理)和“保存到数据库”......两者都是有效的选项 - 但是:既然您已经拥有并了解 WCF,请查看“ netmsmqbinding',它允许您使用 WCF 写入 MSMQ(和读取)。 msdn.microsoft.com/en-us/library/…

标签: c# asp.net polling


【解决方案1】:

我会选择 MSMQ 或 RabbitMQ,而不是轮询。

这样您就可以将处理工作分流给队列的多个消费者(可能是与 Web 服务器分开的服务器),并并行处理更多请求。

【讨论】:

  • 这似乎是目前最好的选择。其他人也建议使用 MSMQ,但我只能接受一个答案。我会接受这个作为答案,因为它有充分的理由选择这种方法而不是轮询。
【解决方案2】:

我在我的一个应用程序中实现了相同的架构,其中用户发出多个请求来处理。所以我有 -

  1. 用户进入网站,选择参数等提交请求
  2. 请求与所有详细信息 + 用户名等一起存储到数据库表中
  3. 服务查看数据库表并以先进先出的方式提取请求
  4. 处理完请求后,根据 requestId 将状态更新为 Failed 或 Completed 到数据库表中,网站上的用户可以看到
  5. 如果有任何请求,服务将接收下一个请求,否则停止。
  6. 服务每 30 分钟运行一次

【讨论】:

  • 如果我有幸每 30 分钟接收一次请求,我会采用这种方法。但是,对于我当前的应用程序,响应需要是实时的,并且可能会产生大量请求(每小时 200 多个请求)。
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多