Использование Quartz.NET как служба Windows
Я пишу компонент планировщика, и я планировал использовать Quartz.net. мои требования таковы:
- пусть планировщик работает 24x7 (остановка / сбой допустимы, его просто нужно будет запустить снова)
- иметь возможность видеть, какие задания/триггеры запланированы через веб-страницу
- возможность добавлять новые задания / триггеры через веб-страницу
Поскольку мне нужен постоянно работающий планировщик, я планировал иметь службу Windows. К сожалению, там ничего не видно. будьте любым способом, чтобы веб-страницы взаимодействовали с планировщиком, запущенным в службе Windows. Я попытался получить экземпляр со следующим кодом, собранным из примеров Turan Arora :
NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "ServerScheduler";
// set thread pool info
properties["quartz.threadPool.threadCount"] = "0";
// set remoting expoter
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler";
// get a reference to the scheduler
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();
Идя по этому маршруту, я получаю сообщение об ошибке: "планировщик с именем "ServerScheduler" уже существует.(ServerScheduler-это имя планировщика по умолчанию.) После некоторого чтения, кажется, что решение состоит в реализации одноэлементного шаблона для создания экземпляра и возврата этот экземпляр на протяжении всего жизненного цикла планировщика.
Это не кажется идеальным решением, потому что я хотел две части-планировщик службы Windows и веб-сайт. Ясно, что веб-сайт не должен владеть планировщиком, потому что, во-первых, он может или не может использоваться 24x7, и мне нужно, чтобы запланированные задания могли выполняться 24x7. Во-вторых, я не думаю, что хочу, чтобы мой веб-сайт связывался со службой Windows, чтобы получить ссылку на планировщик, чтобы получить это информация.
Я полагаю, что неправильно понимаю архитектуру, использующую Quartz.net в этой ситуации. Но, если я прав, возможно, решение состоит в том, чтобы поддерживать реляционное хранилище данных, которое Quartz.net может читать, чтобы получить свои задания, и веб-сайт также может читать, чтобы увидеть, что выполняется. Я хочу, чтобы реляционное хранилище данных сохраняло задания и триггеры в любом случае, так что, возможно, это лучший способ предоставления данных между двумя приложениями?
1 ответ:
Что вы хотите сделать в этом случае, это либо подключиться через удаленное подключение, как вы уже пробовали, просто убедитесь, что вы работаете Quartz.NET процессы на одной машине, у которых разные имена экземпляров.
Если вы уже определились с запуском с помощью AdoJobStore, то одним из простых вариантов является подключение из веб-приложения к тому же магазину заданий без фактического запуска планировщика. Вы можете запрашивать и изменять задания хранилища заданий и триггеры из веб-приложения, позволяя службе выполнять фактические задания. запуск рабочих мест. Вот ответ, связанный с описанным сценарием .