Type-safe and much simpler wrapper for the BullMQ library.
[!WARNING] This project is in the
MVP
state and the API may still change a lot. At the moment, the project fits the requirements of the project rather than general purpose
import { initJobify } from "jobify";
import IORedis from "ioredis";
const redis = new IORedis({
maxRetriesPerRequest: null,
});
const defineJob = initJobify(redis);
const job1 = defineJob("some", {
queue: {
defaultJobOptions: {
delay: 100,
},
},
})
.input<{ date: string }>()
// WORKER OPTIONS
.options({
limiter: {
max: 10,
duration: 1000,
},
})
.action(async (job) => {
console.log("running", job.data.date);
// ^?
});
await job1.add(
"some",
{ date: new Date().toISOString() },
{
delay: 5000,
}
);
const job2 = await defineJob("some-cron")
.input<{ date: string }>()
.options({
limiter: {
max: 10,
duration: 1000,
},
})
.action(async (job) => {
console.log("running", job.data.date);
// ^?
})
// it will run every minute and will not be duplicated during reboots.
.repeatable({
every: 60 * 1000,
});
We add some options by default to Workers
{
removeOnComplete: {
count: 20,
},
removeOnFail: {
age: 24 * 3600,
count: 1000,
}
}
We add it because it recommended in going to production
- maybe pg-boss adapter?
- hooks?
- make job title optional?
- guide with bull-board and some improves for usage