C# 在多个进程之间拆分工作队列

C# 在多个进程之间拆分工作队列,c#,sql-server-2008,service-broker,sqldependency,C#,Sql Server 2008,Service Broker,Sqldependency,我认为工作队列和SqlDependency是一个很好的组合,但我很难将它们组合在一起 假设我有1000个实体,每个实体必须以不同的时间间隔处理,即15、30或45分钟。我希望在多个进程之间分割工作,而不必每分钟轮询SQL Server以查找更多工作。我读过很多与SqlDependency/Query通知相关的文章,但不知道如何对工作进行排队,以及如何将每个进程限制为一组工作项 我编写了一个SqlDependency查询,如下所示: select f1, f2, etc from dbo.enti

我认为工作队列和SqlDependency是一个很好的组合,但我很难将它们组合在一起

假设我有1000个实体,每个实体必须以不同的时间间隔处理,即15、30或45分钟。我希望在多个进程之间分割工作,而不必每分钟轮询SQL Server以查找更多工作。我读过很多与SqlDependency/Query通知相关的文章,但不知道如何对工作进行排队,以及如何将每个进程限制为一组工作项

我编写了一个SqlDependency查询,如下所示:

select f1, f2, etc from dbo.entity where LastRunDt < datediff(minute, 15, @dt)
查询以0结果运行,但当15分钟过去(这将导致此记录集更改其中的更多项)时,不会触发通知。我猜这样不行,所以我一直在研究如何让工作项排队

还有。。当我将两个进程附加到同一工作队列时,当我从dbo.entity SqlDependency query运行select*并更改记录时,每个进程都会收到通知,但它们都接收相同的工作项。我需要在不知道有多少监听器的情况下将工作项划分到可用进程中,监听器可以是2个或12个,具体取决于哪些服务器处于联机状态,哪些服务器处于脱机状态以进行维护

客户机将使用C语言编写


任何已知的模式、想法或方向都将不胜感激。

听起来您需要某种消息队列。有一些常见的中间件包,如NServiceBus


您还可以使用ServiceBroker,它以事务性和快速的方式与SQL Server很好地集成。

您不需要在此处涉及查询通知。直接使用ServiceBroker

让您的C应用程序发布语句来获取工作任务。当工作可用时,使用将消息排队。安排将来使用的工作


此外,Service Broker可以帮助您实际激活C代码,可以作为内部托管存储过程,也可以作为外部独立应用程序,请参见。

开始对话计时器可能就是我要找的。我正在考虑创建一个包含WAITFOR的WHILE循环,但我知道有更好的方法。谢谢。我确实决定使用“开始对话计时器”,但我还有另一个问题需要解答。我想听听你的意见-请看这个谢谢。。。我有很多NServiceBus的用途,但在本例中没有。我认为服务经纪人是一条出路。