我有一种情况,我认为工作队列和 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 分钟过去了,这将导致此记录集发生更改(其中有更多项目),不会触发通知。我猜它不会以这种方式工作,所以我坚持如何让工作项排队。
另外..当我将 2 个进程附加到同一个工作队列时,每个进程都会收到通知(当我运行select * from dbo.entity
SqlDependency 查询并更改记录时),但它们都收到相同的工作项。我需要在可用进程之间划分工作项,而不知道有多少个侦听器,可能是 2 个或 12 个,具体取决于哪些服务器在线以及哪些服务器离线以进行维护。
客户端将用 C# 编写。
任何已知的模式、想法或方向将不胜感激。