21. Фоновые задачи
Механизм фоновых задач в самой простой своей реализации предполагает запуск функций по таймауту с определенным интервалом. Эти функции могут использовать apiSys, что позволяет вызывать внутреннее API от имени системного пользователя и обращаться к любому методу любого класса.
Как правило, вся логика фоновой задачи описывается непосредственно в методе класса, а в файле фоновой задачи этот метод только вызывается. Например, метод Request_work.archiveClosed может реализовывать архивирование заявок, завершенных определенное время назад. Метод может вызываться с заданной периодичностью (раз в час, день и т.д.), выбирать закрытые, но еще не заархивированные заявки и выполнять их обработку.
Особенности реализации
- Процесс выполнения: Фоновые задачи не запускаются в отдельных процессах операционной системы. По умолчанию все задачи выполняются в том же процессе, что и основное приложение. При необходимости запуска в отдельном процессе существует соответствующий механизм (см.
modules/child_processes). - Запуск и задержки: Старт фоновых задач происходит с задержкой после запуска приложения. Задачи из списка запускаются не одновременно, а последовательно с небольшой задержкой между ними. Параметры задержек можно настроить при инициализации, однако по умолчанию запуск осуществляется из файла
www.tsс оптимальными значениями. - Регистрация задач: Список фоновых задач определяется в файле
modules/background_jobs/jobs.ts, куда импортируются функции из директорииmodules/background_jobs/jobs/.
Создание новой фоновой задачи
Для разработки новой фоновой задачи необходимо:
- Скопировать существующий файл задачи (например,
modules/background_jobs/jobs/example.ts). - Отредактировать его, указав вызов нужного метода и настроив интервал повторения.
- Зарегистрировать новую функцию в
modules/background_jobs/jobs.ts.
Управление из конфигурации
Поведением фоновых задач можно управлять через файл конфигурации config/config.json в разделе bj (подробнее см. Параметры config.json).
bj:use
Позволяет полностью отключить запуск всех фоновых задач, если установить значение false.
bj:doNotLog
Позволяет отключить логирование всей цепочки методов, вызванных из фоновых задач.
bj:<BackgroundJob_Name>
Позволяет точечно отключить конкретную фоновую задачу по её имени.