У меня есть ситуация, когда я считаю, что рабочая очередь и 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#.
Буду очень признателен за любые известные шаблоны, мысли или направления.