2013-09-23 4 views
2

Я пишу компонент планировщика, и я планировал использовать Quartz.net. Мои требования:Использование Quartz.NET в качестве службы Windows

  1. Есть планировщик работает в режиме 24x7 (остановка/недостаток является приемлемым, он просто должен был бы начать снова)
  2. быть в состоянии видеть, что вакансии/спусковые планируется через веб-страницу
  3. Уметь добавлять новые рабочие места/триггеров через веб-страницу


Поскольку мне нужен планировщик работает постоянно, я планировал иметь службу 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 может читать, чтобы получить свои рабочие места, а веб-сайт также может читать, чтобы увидеть, что выполняется. Я хочу, чтобы хранилище реляционных данных сохраняло задания и триггеры в любом случае, возможно, это лучший способ предоставить данные между двумя приложениями?

ответ

2

Что вы хотите сделать в этом случае - либо подключиться через удаленный доступ, как вы пробовали, просто убедитесь, что вы выполняете процессы Quartz.NET на том же компьютере, что и разные имена экземпляров.

Если вы уже решили работать с использованием AdoJobStore, тогда один простой вариант - подключиться из веб-приложения к одному и тому же хранилищу заданий без фактического запуска планировщика. Вы можете запрашивать и изменять задания хранилища заданий и триггеры из веб-приложения и позволять службе запускать фактический запуск заданий. Here's an answer related to described scenario.

+0

Спасибо за ваш ответ. Я изменил некоторые из моих параметров на основе информации [здесь] (http://stackoverflow.com/questions/11968884/quartz-net-use-one-windows-service-to-execute-jobs-and-two-web- applications-to/11970904 # 11970904), и он работал так, как я ожидал, подключившись к удаленному экземпляру, который был запущен. Спасибо, что подтвердили, что это путь! –

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