This module provides a component for cron integration and asynchronous execution of scripts using LoopBack. It is designed to leverage the robust LoopBack framework for scheduling and executing worker jobs reliably and efficiently.
- Asynchronous execution of worker jobs.
- Integration with LoopBack components for easy and seamless setup.
- Cron job scheduling with fine-grained control over time intervals.
- Comprehensive logging with support for Winston Logger.
To get started, add the library in your LoopBack project by running:
npm install loopback-async-workers
In your application.ts
, configure Loopback Async Workers
as a component:
import { WorkerComponent } from 'loopback-async-workers';
export class ApiApplication extends BootMixin(
ServiceMixin(RepositoryMixin(RestApplication)),
) {
constructor(options: ApplicationConfig = {}) {
super(options);
// Other configurations...
// Add the WorkerComponent
this.component(WorkerComponent);
// Other configurations...
}
}
To create a worker, define a class extending WorkerJob
and use the @workerJob()
decorator:
import { inject, service } from '@loopback/core';
import { repository } from '@loopback/repository';
import { WorkerJob, workerJob } from 'loopback-async-workers';
import { ExampleRepository } from '../repositories';
import { ExampleProvider } from '../services';
@workerJob()
export class ExampleWorker extends WorkerJob {
constructor(
@repository(ExampleRepository) private exampleRepository: ExampleRepository,
@service(ExampleProvider) public exampleProvider: ExampleProvider,
) {
super({
name: 'example-worker',
onError: (message) => console.error(message),
onTick: async () => {
try {
await this.runProcess();
} catch (err: any) {
console.error(`${this.name} ${err.message}`, err);
}
},
limitTime: 600000,
cronTime: '*/1 * * * *',
});
}
runProcess = async () => {
// ...run some process
}
}
Once you have set up your workers, they will execute based on the cron jobs defined. Each worker job can be independently configured with different intervals and timeout settings.
To test the workers, use the following command:
npm test
This command will run all the unit tests defined for your worker jobs.
If you would like to contribute, please refer to our contribution guidelines.
This project is licensed under the terms of the ISC license. See LICENSE for more details.
For any issues, please open a GitHub issue.