每秒轮询数据库并启动n个长时间运行的任务

时间:2014-01-31 12:45:10

标签: .net multithreading sql-server-2008 .net-4.0 polling

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

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

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

更新:我们没有启用SQL Server Service Broker,理想情况下我想在没有它的情况下寻求解决方案;至少我认为这对于这项任务来说是一个开销。但我很高兴不相信。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

对我来说更具体的实施:

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

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

HTH。