每秒钟轮询一次数据库并开始n个长时间运行的任务

传统应用程序可能每秒都会向我们的数据库写入数据。 它可以一次写入多个条目。 每个条目都需要尽快处理,并且需要为每个条目调用长时间运行的外部Web服务。

我想知道最好的架构/模式来处理这个问题:我们需要每秒轮询一次数据库,然后 - 根据新条目的数量 - 启动这些长时间运行的任务(被调用的外部Web服务)中的n个。 这些任务将把结果写回到遗留应用程序拾取的数据库中。

我应该“简单地”使用System.Threading.Tasks和System.Timers.Timer的组合来实现这一点,还是有更好的选择? (基于.Net 4.0和SQL Server 2008)

更新:我们没有启用SQL Server Service Broker,理想情况下我希望没有它的解决方案; 至少我认为这对这项任务来说是一个开销。 但我很乐意被说服。


对我来说更具体的实施:

我会使用Windows服务器每秒查询数据库(如您的要求中所述)。

然后,我会让异步WCF,因为这些可以像你说的那样长时间运行。

HTH。


这个问题引起了对全球设计的更多关注,而不是具体的.net特性。 我肯定会在记录修改时使用触发器解决方案。 为了避免数据库加载,该触发器将只写入事件的性质:记录的id,事件类型在单独的事件表中。 轮询过程将只读取事件表,并根据需要处理事件并将其存档以用于统计目的。 通过这种方式,您可以控制加载选择,您可以调整长时间运行的流程以适应您的性能要求,并且您可以掌握所做的一切。 我已经建立了一个类似的系统,大约有一亿次事件一次到达,没有任何问题。

链接地址: http://www.djcxy.com/p/74511.html

上一篇: Poll database every second and start n long running tasks

下一篇: Managing child worker threads list