2011-01-05 53 views
0

为了更好地控制系统负载,我需要在后台连续运行排队作业(或并行运行n个线程)。微软任务的连续后台处理

作业将使用表作为队列在SQL Server 2008数据库中排队。

我需要一个简单的“引擎”,它将从队列中取出元素并执行一些处理代码。处理代码将是C#/ .net。

我主要关注的是简单性,可测试性,简单部署和可靠性。

我在寻找有关该技术的建议,如Biztalk或者Windows服务?

+0

你是什么意思?你已经说过你要使用SQL和C#。那么你在问怎么写这段代码?你有没有尝试过任何东西,它不工作? – spinon 2011-01-05 22:00:07

+0

对不起。我正在寻找的是关于“引擎”部分技术的想法。我没有及时了解所有新技术。我觉得我需要比控制台应用“更好”的东西,因为它需要从服务器开始并始终保持运行。 – squareeyes 2011-01-05 22:13:36

回答

1

这里有一些选项适合你,但Writing a windows service是我会选的。检查链接了。它给出了一个基本的例子,可以帮助你开始。

另一种选择是使用SQL Server Agent作为调度程序在需要时触发C#可执行文件。然而,这不是一个好的选择,因为它对我来说更像是一种黑客攻击。

0

我们在谈论什么样的工作?如果作业本身由数据库工作组成,那么最好的选择是在SQL Server中利用internal Activation。内部激活也可以启动C#/ .Net代码。一个例子见Asynchronous procedure execution。使用激活是最可靠的方法。计划的作业可以在镜像和群集故障切换之后生存。事实上,它非常可靠,即使在服务器崩溃之后,计划作业也会激活并运行,并在新主机上从数据库备份重建服务器。但是,如果工作需要做'外部'工作,就不应该使用这种方法。连接到Web服务。对于这些服务,您可以使用External Activator,并利用SQL Server激活机制固有的可靠性和自我平衡规模,但最终仍然是Windows Service和Service Broker队列。

如果您发现内置SQL队列的开销很高,我建议您通过Using tables as Queues并尝试坚持基本操作。不要在队列表中添加花哨的窥视或扫描,否则系统会陷入死锁状态,这是将表用作队列的常见问题。