5.1.0-beta ā€¢ Published 1 year ago

@ordermentum/steveo v5.1.0-beta

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
1 year ago

npm version CI npm npm

A Task Pub/Sub Background processing library (Task Framework for Node.js)

Steveo is a task management library that supports Kafka, SQS and Redis.

Think of it as sidekiq for node.js with support for multiple backends.

Installation

This is a Node.js module available through the npm registry.

Before installing, download and install Node.js. Node.js 12 or higher is required.

If this is a brand new project, make sure to create a package.json first with the npm init command.

Installation is done using the npm install command:

$ npm install steveo

Author

šŸ‘¤ engineering@ordermentum.com

Task

Holds the information about the type of task. It has below methods,

  • publish - send a message onto a queue
  • subscribe - process a message

Registry

Responsible for keeping the inventory of tasks & event manager. Whenever a new task is created, an entry will be added in the registry

Runner

Responsible for consuming messages,

  • process method initialize group consumers and start to consume the messages. It will then call the subscribe callback set on the task

Emitting events based on success/failures

  • runner_receive -> Received a message
  • runner_complete -> Completed running the associated task
  • runner_failure -> Failed running the associated task
  • runner_connection_failure -> Error while polling for message (Kafka only)

  • task_send

  • task_success
  • task_failure
  • task_added
  • task_removed

  • producer_success

  • producer_failure

Example

(async () => {
  const steveo = Steveo({
    kafkaConnection: process.env.KAFKA_CONNECTION,
    clientId: '1234-123',
  });

  const example = steveo.task('example-task', async ({ name }) => {
    console.log(`hello ${name}`);
  });

  await example.publish({ name: 'tommo' });
  await example.publish({ name: 'bazza' });

  await steveo.runner().process();
})();

Publish without registering a task

await steveo.publish('example-task', { name: 'Apple' });

For more details, see example

Contributing

Installing dependencies

yarn install

Running tests

yarn run test

Architecture

On a highlevel, it works as below, Steveo has 3 main components

              +-----------+     +-----------+     +-----------+
              |           |     |           |     |           |
PUBLISH ----->|   TASK    |     | REGISTRY  |     |   RUNNER  |-----> RECEIVE
              |           |     |           |     |           |
              |           |     |           |     |           |
              +-----------+     +-----------+     +-----------+

Credits