Как можно планировать задачи в NestJS?
В NestJS вы можете планировать задачи с использованием модуля @nestjs/schedule
, который предоставляет функционал для
простого и удобного создания расписаний для выполнения задач в фоновом режиме. Это может быть полезно, например, для
отправки периодических уведомлений, выполнения задач по расписанию или очистки баз данных.
Установка модуля
Первым шагом будет установка необходимого пакета. Вы можете сделать это с помощью npm или yarn:
npm install --save @nestjs/schedule
или
yarn add @nestjs/schedule
Настройка модуля
После установки модуля вам необходимо зарегистрировать его в вашем приложении. Откройте главный модуль вашего
приложения (обычно это app.module.ts
) и добавьте ScheduleModule
:
import {Module} from '@nestjs/common';
import {ScheduleModule} from '@nestjs/schedule';
import {AppService} from './app.service';
import {AppController} from './app.controller';
@Module({
imports: [
ScheduleModule.forRoot(), // Регистрация модуля планирования
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {
}
Создание задачи с использованием Cron
Теперь вы можете создать задачу, которая будет выполняться по расписанию. Для этого создайте новый сервис, например
tasks.service.ts
:
import {Injectable} from '@nestjs/common';
import {Cron} from '@nestjs/schedule';
@Injectable()
export class TasksService {
// Задача, которая будет выполняться каждую минуту
@Cron('* * * * *')
handleCron() {
console.log('Задача выполняется каждую минуту');
}
}
Использование TasksService
Теперь вам нужно зарегистрировать этот сервис в вашем AppModule
:
import {Module} from '@nestjs/common';
import {ScheduleModule} from '@nestjs/schedule';
import {AppService} from './app.service';
import {AppController} from './app.controller';
import {TasksService} from './tasks.service'; // Импортируйте ваш сервис
@Module({
imports: [
ScheduleModule.forRoot(),
],
controllers: [AppController],
providers: [AppService, TasksService], // Добавьте сервис в провайдеры
})
export class AppModule {
}
Использование другого планировщика - Interval
Если вам нужно выполнять задачу с определенным интервалом, вы можете использовать декоратор @Interval
. Вот пример, как
это сделать:
import {Injectable} from '@nestjs/common';
import {Interval} from '@nestjs/schedule';
@Injectable()
export class TasksService {
@Interval(5000) // Эта задача будет выполняться каждые 5 секунд
handleInterval() {
console.log('Эта задача выполняется каждые 5 секунд');
}
}
Заключение
С помощью модуля @nestjs/schedule
вы можете легко планировать задачи в вашем приложении на NestJS. Теперь вы можете
использовать @Cron
, @Interval
и @Timeout
для создания расписаний, которые соответствуют вашим требованиям. Это
делает вашу систему более управляемой и добавляет множество возможностей в обработку фоновых задач.
Если вам нужно больше информации, вы можете ознакомиться с документацией NestJS здесь.