Перейти к содержанию

Выполнение действий по расписанию Quartz.NET

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

[ Полезный рекламный блок ]

Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.


В этой статье мы рассмотрим, как запускать задания по расписанию Quartz.NET с помощью размещенной службы ASP.NET Core.

Выполнение действий по расписанию Quartz.NET

Что такое Quartz.NET?

Quartz.NET — это полнофункциональная система планирования заданий с исходным кодом, которую можно использовать от самых маленьких приложений до крупномасштабных корпоративных систем. Это старый штапель многих разработчиков ASP.NET, используемый как способ запуска фоновых задач по таймеру, надежным, кластерным способом.

Quartz.NET имеет три основных понятия:

  • Задание: это фоновые задания, которые вы хотите запустить.
  • Триггер: контролирует, когда выполняется задание, обычно по какому-то расписанию.
  • Планировщик: отвечает за координацию заданий и триггеров, выполняя задания в соответствии с требованиями триггеров.

Хотя можно создать фоновую службу «по времени» (например, выполняющую задачи каждые 10 минут), Quartz.NET предоставляет гораздо более надежное решение. Вы можете обеспечить выполнение задач только в определенное время суток (например, в 2:30 утра), или только в определенные дни, или в любой комбинации, используя триггер Cron. Quartz.NET также позволяет запускать несколько экземпляров приложения в кластерном режиме, так что в любой момент времени только один экземпляр может выполнять определенную задачу.

Размещенная служба Quartz.NET заботится о планировщике Quartz. Он будет работать в фоновом режиме вашего приложения, проверяя триггеры, которые выполняются, и запуская связанные с ними задания по мере необходимости. Вам необходимо первоначально настроить планировщик, но вам не нужно беспокоиться о его запуске или остановке, IHostedService управляет этим за вас.

Установка Quartz.NET

Откройте Visual Studio 2022.

Создайте проект «Asp.Net Core Web Application(.Net Core)» с шаблоном MVC Template. В графе Authentication type, оставляем значение None.

Вы можете загрузить zip-файл или использовать пакет NuGet. NuGet-пакет содержит только двоичные файлы, необходимые для запуска Quartz.NET, zip-файл поставляется с исходным кодом, примерами и примером приложения сервера Quartz.NET.

  1. Скачаем библиотеки:
  • Quartz.AspNetCore
  • Quartz.Extensions.DependencyInjection

Выполнение действий по расписанию Quartz.NET

Можно так же через Package Manager Console:

  1. Для фактической фоновой работы, которую мы планируем, будем использовать вывод строки «hello world», в консоль и в лог(ILogger<T>). Мы должны реализовать интерфейс IJob из Quartz.NET, который содержит единственный асинхронный метод Execute().

Добавим в проект новую папку, которую назовем LoggerJob. В эту папку добавим новый класс LoggerSender, со следующим содержимым:

Обратите внимание, что здесь я использую инъекцию зависимостей, чтобы внедрить логгер в конструктор. Я также пометил задание атрибутом [DisallowConcurrentExecution]. Этот атрибут предотвращает попытки Quartz.NET выполнить одно и то же задание одновременно.

  1. В Quartz.NET есть несколько простых расписаний для запуска заданий, но один из наиболее распространенных подходов — использование выражения Quartz.NET Cron. Выражения Cron позволяют составлять сложные расписания по таймеру, поэтому вы можете установить такие правила, как «запускать каждые полчаса между 8 и 10 часами утра, 5 и 20 числа каждого месяца». В классе Program.cs, зарегистрируем LoggerJob с триггером, который будет запускаться каждые 5 секунд:

В этом коде, мы:

  • Создали уникальный ключ JobKey для задания. Он используется для связи задания и триггера. Существуют и другие подходы к связыванию заданий и триггеров, но я считаю, что этот подход ничем не хуже других.
  • Зарегистрировали LoggerJob с помощью AddJob<T>. Метод делает две вещи — добавляет HelloWorldJob в контейнер DI, чтобы он мог быть создан, и регистрирует задание в Quartz внутри.
  • Добавили триггер для запуска задания каждые 5 секунд. Мы используем JobKey, чтобы связать триггер с заданием, и даем триггеру уникальное имя (необязательно для данного примера, но важно, если вы запускаете Quartz в кластерном режиме, что является лучшей практикой). Наконец, мы устанавливаем расписание Cron для триггера, чтобы задание выполнялось каждые 5 секунд.

И это все! Больше не нужно создавать собственный IJobFactory или беспокоиться о поддержке скопированных сервисов. Пакет по умолчанию делает все это за вас — вы можете использовать сервисы в своем IJob, и они будут утилизированы по завершению работы.

Если запустить приложение, вы увидите вывод сообщения Hello World в консоли каждые 5 секунд:

asp.net логирование по расписанию

Настройка CronSchedule

Выполнение действий по расписанию Quartz.NET возможно с использованием CronTrigger или SimpleTrigger. если вам нужно расписание выполнения заданий, которое повторяется на основе представлений, подобных календарю, а не на основе точно заданных интервалов, то лучшим выбором будет — CronTrigger. Его и рассмотрим.

Экземпляры CronTrigger строятся с помощью TriggerBuilder (для основных свойств триггера) и метода расширения WithCronSchedule. Рассмотрим варианты диапазонов для ваших задач.

  1. Триггер, будет срабатывать каждые 5 минут:

2. Триггер, будет срабатывать каждые 5 минут, через 10 секунд после минуты (т.е. 10:00:10 утра, 10:05:10 утра и т.д.):

3. Триггер, который срабатывает в 10:30, 11:30, 12:30 и 13:30, в каждую среду и пятницу:

4. Триггер, который будет срабатывать каждые две минуты, с 8 утра до 5 вечера, каждый день:

5. Триггер, который будет срабатывать ежедневно в 10:42 утра:

или так:

6. Триггер, который будет срабатывать по средам в 10:42 утра:

7.Триггер, который срабатывает каждые полчаса между 8 и 10 часами утра 5 и 20 числа каждого месяца:

На этом статья «Выполнение действий по расписанию Quartz.NET», подошла к концу, надеюсь вам было интересно. Для получения более подробной информации смотрите документацию по Quartz.NET.

Поделитесь вашим опытом в комментариях, как вы выполняете действия по умолчанию ASP.NET Core приложениях?

Так же вам может быть интересна предыдущая статья:

Генерация кода Captcha в ASP.NET Core

Вы начинающий программист, который хочет изучить все тонкости языка C#?

Пройдите наш тест на 13 вопросов, чтобы узнать, как много вы знаете на самом деле!

C# Braincheck


Вы хотите научится писать код на языке программирования C#?

Создавать различные информационные системы, состоящие из сайтов, мобильных клиентов, десктопных приложений, телеграмм-ботов и т.д.

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

  • Доступ к пройденному материалу
  • Тематические статьи
  • Библиотека книг
  • Онлайн тестирование
  • Общение в закрытых группах

https://dijix.com.ua

Живи в своем мире, программируй в нашем.


 

Опубликовано в рубрикеAsp.Net Core
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x