【问题标题】:Best practice with a schedule/queue service?调度/队列服务的最佳实践?
【发布时间】:2012-10-16 10:10:43
【问题描述】:

我目前正在做一个项目,这个项目基本上是一个网站,它作为它的主要功能,运行一个很长的计算任务(这个任务由1-10个子任务组成)-(大约需要30-40平均秒完成)并向用户返回结果,因为它的代码在网站本身中使用了多线程(我不太喜欢这个想法),所以网站在单击按钮后继续运行,而后台的这个线程继续计算。

理想情况下,我希望将此计算转移到单独的服务中,以停止与在 Web 应用程序中运行线程相关的问题。我的想法是它应该是一个单独的服务,每 X 秒运行一次,以查看数据库中是否存在任何作业,如果有,运行它们,但我在编写重复出现的 Windows 服务方面经验不足,想知道是否有人对此事有任何想法,这是完成此类任务的正确方法吗,是否有人有做类似事情的经验,有人可以推荐我应该继续的任何特定方法吗?

【问题讨论】:

    标签: c# .net multithreading queue


    【解决方案1】:

    我正在做一个类似的项目。我正在考虑像您一样创建一项服务,但我没有看到我的案例的好处。我必须做一些长时间的计算,并将其放入缓存中。我不知道这是否是最佳实践,但我所做的是在 global.asax 上创建一个计时器,执行我的计算并将其放入缓存中。当请求到来时,我给出最后一个缓存的值。

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

      在这种情况下,我总是更喜欢创建一个接受来自客户端的请求的 tcp 侦听器。如果我使用 .net,我的首选是带有 tcp 或命名管道绑定的 wcf 服务。然后,当我收到请求时,我会启动一个线程来处理请求。当长时间运行的进程最终结束时,我向客户端返回一个回调,该回调是在对调度程序的第一个请求中指定的 url。恕我直言,这是最好的方法。

      但是,您可能希望在 NServiceBus、RhinoBus 等经过验证的框架上构建您的应用程序。您也可以在它们上实现相同的业务。

      【讨论】:

        猜你喜欢
        • 2014-03-06
        • 2016-06-28
        • 2017-05-08
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 2014-03-20
        • 2016-03-27
        • 1970-01-01
        相关资源
        最近更新 更多