aws-agenda

Light weight job scheduler for Node.js

Usage no npm install needed!

<script type="module">
  import awsAgenda from 'https://cdn.skypack.dev/aws-agenda';
</script>

README

Agenda

A light-weight job scheduling library for Node.js

Aws-agenda offers

  • Minimal overhead. 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.

Feature Comparison

Since there are a few job queue solutions, here a table comparing them to help you use the one that better suits your needs.

Agenda is great if you need something that is simple and backed by MongoDB.

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.

Installation

Install via NPM

npm install aws-agenda

You will also need a working AWS account witg access to a dynamodb database.

Example Usage

const awsConfig = {
  profile: awsProfile, // AWS profile object
  region: awsRegion, // AWS region
  scheduleTable: awsDynamoDbScheduleMeta // 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})

Agenda Events

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, as agenda.start() will not resolve until indices have been created. If you're using the db options, or call database, then you may still need to listen for the ready 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();

Acknowledgements

License

The MIT License