micro-job-scheduler
v1.1.1
Published
Promise-based in-memory micro job scheduler
Downloads
14
Maintainers
Keywords
Readme
Sometimes you just want to run tasks at a regular interval, with some concurrency, and the overhead of job scheduling systems like agenda are just too much.
This package implements a very simple job scheduler that allows you to run jobs on a schedule (defined by an ISO 8601 duration), with support for running jobs of a particular type with a level of concurrency.
It is implemented with a basic setInterval
that runs once a second and looks for jobs to schedule.
Getting Started
import MicroJobScheduler from "micro-job-scheduler";
const scheduler = new MicroJobScheduler();
for (let i = 0; i < 10; i++) {
scheduler.addJob(
{
concurrencyKey: "aJob",
durationBetweenRuns: "PT1M",
fn: aJob,
},
{
i,
}
);
}
scheduler.setConcurrency("aJob", 2);
async function aJob(job: Job) {
return new Promise((resolve) => {
console.log("A JOB IS RUNNING", job.id, job.data);
setTimeout(() => {
console.log("A JOB IS COMPLETED", job.id, job.data);
resolve();
}, 10000);
});
}
scheduler.start();
API
start()
Starts the job scheduler.
stop()
Stop the job scheduler.
addJob(jobOptions, jobData)
Add a job with the given options, and the given data. Options you can pass are:
durationBetweenRuns
: An ISO8601 duration string, likePT5M
to indicate 5 minutes. UsePT0M
(or anything else that is a valid ISO8601 duration that is 0 seconds long) for a single-shot job that should only be run once, and removed from the scheduler when it completes (successfully or unsuccessfully).concurrencyKey
: A string which groups jobs together for the purpose of concurrencyfn
: The function to run your job, with the signaturefn(job: Job): Promise<any>
.
removeJob(jobId)
Removes a job from the scheduler.
updateJobData(jobId, data)
Updates the data for a job.
setConcurrency(concurrencyKey, concurrency)
Sets how many jobs with a particular concurrencyKey
can run simultaneously.
getJobs()
Returns a copy of the internal scheduler state.
Supporters
This package is supported by SaaSquatch.
License
This project is licensed under the MIT License - see the LICENSE.md file for details