遗留应用程序可能每秒都在写入我们的数据库。它可以一次写入多个条目。这些条目中的每一个都需要尽快处理,并且需要为每个条目调用长时间运行的外部Web服务。
我想知道最好的架构/模式来处理这个问题:我们需要每秒轮询一次数据库,然后 - 根据新条目的数量 - 启动这些长时间运行的任务(调用外部Web服务) 。这些任务会将结果写回数据库,并由遗留应用程序选择。
我应该“简单地”使用System.Threading.Tasks和System.Timers.Timer的组合来实现这个还是有更好的选择? (基于.Net 4.0& SQL Server 2008)
更新:我们没有启用SQL Server Service Broker,理想情况下我想在没有它的情况下寻求解决方案;至少我认为这对于这项任务来说是一个开销。但我很高兴不相信。
答案 0 :(得分:1)
这个问题引起了对全球设计的更多担忧,而不是具体的.net功能。我肯定会采用触发解决方案进行记录修改。为避免数据库加载,此触发器仅写入事件的性质:记录的id,单独事件表中的事件类型。轮询过程将只读取事件表,并根据需要处理事件并将其存档以用于统计目的。通过这种方式,您可以控制负载选择,您可以调整长时间运行的过程以满足您的性能要求,并且您已经完成了所做的工作。我建立了一个类似的系统,大约有1亿个事件一次到达,没有任何问题。
答案 1 :(得分:1)
对我来说更具体的实施:
我会使用Windows服务器每秒查询数据库(如您的要求中所述)。
然后我会创建异步WCF,因为这些可以像你说的那样长时间运行。
HTH。