1

В настоящее время я работаю над Quartz.NET (версия 2.3.1). Я создал различные Планировщики с различными заданиями, используя приведенный ниже код (для каждого планировщика):Кварцевые планировщики, управляемые внешним приложением

NameValueCollection properties = new NameValueCollection(); 
properties["quartz.scheduler.instanceName"] = "QuartzSchedulerTest"; 
properties["quartz.scheduler.instanceId"] = AUTO; 
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; 
properties["quartz.threadPool.threadPriority"] = "Normal"; 
properties["quartz.jobStore.misfireThreshold"] = "60000"; 
properties["quartz.jobStore.clustered"] = "true"; 
properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; 
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; 
properties["quartz.jobStore.dataSource"] = "default"; 
properties["quartz.jobStore.useProperties"] = "false"; 
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"; 
properties["quartz.dataSource.default.connectionString"] = "myConnString" 
properties["quartz.dataSource.default.provider"] = "SqlServer-20"; 

// Get scheduler 
ISchedulerFactory sf = new StdSchedulerFactory(properties); 
IScheduler scheduler = sf.GetScheduler(); 

Теперь я все планирования информации, хранящейся в базе данных SQL, и все работает.

Я создал новое консольное приложение, потому что мне нужно управлять всеми планировщиками (получить список планировщиков, задания для каждого планировщика, отправить команду на паузу и возобновить триггеры ecc ...). Это код, который я написал, чтобы попытаться иметь обработчик для всех существующих планировщиков:

NameValueCollection properties = new NameValueCollection(); 
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; 
properties["quartz.threadPool.threadPriority"] = "Normal"; 
properties["quartz.jobStore.misfireThreshold"] = "60000"; 
properties["quartz.jobStore.clustered"] = "true"; 
properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; 
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; 
properties["quartz.jobStore.dataSource"] = "default"; 
properties["quartz.jobStore.useProperties"] = "false"; 
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"; 
properties["quartz.dataSource.default.connectionString"] = "myConnString" 
properties["quartz.dataSource.default.provider"] = "SqlServer-20"; 

// Get scheduler 
ISchedulerFactory sf = new StdSchedulerFactory(properties); 
var schedulers = sf.AllSchedulers; 

Но никаких обработчиков не возвращается (кол-планировщиков равно 0). Может ли кто-нибудь сказать мне, как я могу получить все планировщики? Является ли это возможным?

Извините за мой английский и спасибо заранее.

+0

Вам необходимо получить доступ к планировщикам [удаленно] (http://stackoverflow.com/questions/26480787/get-an-instance-of-the-scheduler-that-is-being-run-on-a-windows -service/26482361 # 26482361) –

ответ

0

Вам необходимо подключиться к каждому экземпляру планировщика напрямую, используя удаленный доступ. Планировщики не знают друг о друге, и нет возможности получить список всех планировщиков, находящихся в кластере.

Как только вы подключитесь к каждому планировщику, вы сможете вытащить список выполняемых заданий и при необходимости обработать расписание заданий. Если все планировщики находятся в кластере, то вам не нужно подключаться ко всем из них для управления самими заданиями. Вы можете сделать это из любого из экземпляров. Однако список выполняемых заданий должен быть скомпилирован, задав каждый планировщик по отдельности.

Смежные вопросы