A light-weight job scheduling library for Node.js
- Minimal overhead. aws-agenda aims to keep its code base small.
- DynamoDB backed persistence layer.
- Promises based API.
- Scheduling.
- Event backed job queue that you can hook into.
Since there are a few job queue solutions, here a table comparing them to help you use the one that better suits your needs.
Aws-agenda is great if you need something that is simple and backed by DynamoDB.
Feature | Bull | Kue | Bee | Agenda | Agenda AWS |
---|---|---|---|---|---|
Backend | redis | redis | redis | mongo | dynamodb |
Priorities | ✓ | ✓ | ✓ | ||
Concurrency | ✓ | ✓ | ✓ | ✓ | ✓ |
Delayed jobs | ✓ | ✓ | ✓ | ✓ | |
Global events | ✓ | ✓ | |||
Rate Limiter | ✓ | ||||
Pause/Resume | ✓ | ✓ | |||
Sandboxed worker | ✓ | ||||
Repeatable jobs | ✓ | ✓ | |||
Atomic ops | ✓ | ✓ | |||
Persistence | ✓ | ✓ | ✓ | ✓ | ✓ |
UI | ✓ | ✓ | ✓ | ||
REST API | ✓ | ||||
Optimized for | Jobs / Messages | Jobs | Messages | Jobs | Jobs |
Kudos for making the comparison chart goes to Bull maintainers.
Install via NPM
npm install aws-agenda
You will also need a working AWS account with access to a dynamodb database.
const awsConfig = {
profile: '', // AWS profile
region: '', // AWS region
scheduleTable: '' // DynamoDB table where the jobs will be stored
}
const agenda = new Agenda(awsConfig);
await agenda.start()
// Define a job
await agenda.define('UniqueJobName', { concurrency: 1 }, job => {
// Do things
})
// Schedule a job
await agenda.schedule(date, `UniqueJobName`, {jobData})
An instance of an agenda will emit the following events:
ready
- called when Agenda DynnamoDB connection is successfully opened and indices created. If you're passing agenda an existing connection, you shouldn't need to listen for this, asagenda.start()
will not resolve until indices have been created. If you're using thedb
options, or calldatabase
, then you may still need to listen for theready
event before saving jobs.agenda.start()
will still wait for the connection to be opened.error
- called when Agenda DynnamoDB connection process has thrown an error
await agenda.start();
- Agenda was originally created by @rschmukler.
- Agendash was originally created by @joeframbach.
- These days Agenda has a great community of contributors around it. Join us!
- This simplified port of agenda to aws is created by @gariasf