Версия:

21. Фоновые задачи

Механизм фоновых задач в самой простой своей реализации предполагает запуск функций по таймауту с определенным интервалом. Эти функции могут использовать apiSys, что позволяет вызывать внутреннее API от имени системного пользователя и обращаться к любому методу любого класса.

Как правило, вся логика фоновой задачи описывается непосредственно в методе класса, а в файле фоновой задачи этот метод только вызывается. Например, метод Request_work.archiveClosed может реализовывать архивирование заявок, завершенных определенное время назад. Метод может вызываться с заданной периодичностью (раз в час, день и т.д.), выбирать закрытые, но еще не заархивированные заявки и выполнять их обработку.

Особенности реализации

  1. Процесс выполнения: Фоновые задачи не запускаются в отдельных процессах операционной системы. По умолчанию все задачи выполняются в том же процессе, что и основное приложение. При необходимости запуска в отдельном процессе существует соответствующий механизм (см. modules/child_processes).
  2. Запуск и задержки: Старт фоновых задач происходит с задержкой после запуска приложения. Задачи из списка запускаются не одновременно, а последовательно с небольшой задержкой между ними. Параметры задержек можно настроить при инициализации, однако по умолчанию запуск осуществляется из файла www.ts с оптимальными значениями.
  3. Регистрация задач: Список фоновых задач определяется в файле modules/background_jobs/jobs.ts, куда импортируются функции из директории modules/background_jobs/jobs/.

Создание новой фоновой задачи

Для разработки новой фоновой задачи необходимо:

  1. Скопировать существующий файл задачи (например, modules/background_jobs/jobs/example.ts).
  2. Отредактировать его, указав вызов нужного метода и настроив интервал повторения.
  3. Зарегистрировать новую функцию в modules/background_jobs/jobs.ts.

Управление из конфигурации

Поведением фоновых задач можно управлять через файл конфигурации config/config.json в разделе bj (подробнее см. Параметры config.json).

bj:use

Позволяет полностью отключить запуск всех фоновых задач, если установить значение false.

bj:doNotLog

Позволяет отключить логирование всей цепочки методов, вызванных из фоновых задач.

bj:<BackgroundJob_Name>

Позволяет точечно отключить конкретную фоновую задачу по её имени.