В одном из текущих проектов понадобилось реализовать windows-сервис, который бы запускался раз в час, делал своё дело и засыпал до следующего запуска. Реализовал просто - через таймер.
Потом понадобилось добавить еще одну периодическую задачу, которая должна запускаться с другим интервалом. Как бы не проблема: создаём еще один таймер и радуемся. И что плодить таймеры каждый раз? Не хочу, ибо не красиво. Создать свой движок, управляющий созданием таймеров - тоже вариант. Но решил поискать существующие решения этой задачи.
Натолкнулся на Quartz.NET - портированный с Java open source framework Quartz. На сайте библиотеки есть много примеров использования scheduler.
Можно задавать:
Потом понадобилось добавить еще одну периодическую задачу, которая должна запускаться с другим интервалом. Как бы не проблема: создаём еще один таймер и радуемся. И что плодить таймеры каждый раз? Не хочу, ибо не красиво. Создать свой движок, управляющий созданием таймеров - тоже вариант. Но решил поискать существующие решения этой задачи.
Натолкнулся на Quartz.NET - портированный с Java open source framework Quartz. На сайте библиотеки есть много примеров использования scheduler.
Можно задавать:
- Триггеры
- Job'ы - описываете периодичность работы задачи. Очень понравилась возможность задавать расписание в виде Cron Expression
- Слушатели
- Календари
- и многое другое
Внедрение библиотеки труда не вызвало. Вышло просто и изящно.
Затем задался вопросом: есть ли какие-нибудь инструменты мониторинга-управления созданными задания.
Нашёл:
Лично я остановился на последнем варианте. Конечно первый вариант более свежий, но мне он не так приглянулся чисто эстетически. Хотя последний вариант давно не обновлялся (середина 2011 года), я быстро скачал исходники, обновил их до последней версии Quartz.NET на текущий момент (2.1.2). После чего связался с автором. Он оказался нашим соотечественником. Вскоре обновленная версия библиотеки появилась на github. К тому же у данной версии есть nuget-пакеты, что меня радует, т.к. я их использую во всех своих проектах для простоты обновления. Пакеты есть в 2х вариантах:
Вариант Remote мне как раз подошёл, т.к. задания у меня выполняются на одном сервере, а веб-морда находится на другом. Интеграция проста:
- На сервере заданий настраиваете rpc-соединение (указываете порт, адрес, протокол)
- На клиенте копируете нужные библиотеки в папку bin, модифицируете файл web.config и радуетесь. Часть работы делается при установке пакета CrystalQuartz.Remote. Нужно только адрес и порт подправить.
Пользуйтесь на здоровье :-)
Комментариев нет:
Отправить комментарий