Skip to content

A JS abstraction for the pub-sub pattern

License

Notifications You must be signed in to change notification settings

Superbalist/js-pubsub

Repository files navigation

@superbalist/js-pubsub

A JS abstraction for the pub-sub pattern

Author Build Status Software License NPM Version NPM Downloads

Installation

npm install @superbalist/js-pubsub

Adapters

Integrations

Want to get started quickly? Check out some of these integrations:

Usage

"use strict";

let LocalPubSubAdapter = require('@superbalist/js-pubsub').LocalPubSubAdapter;

let adapter = new LocalPubSubAdapter();

// consume messages
adapter.subscribe('my_channel', (message) => {
  console.log('channel: my_channel');
  console.log(message);
});

// publish messages
adapter.publish('my_channel', 'Hello World!');

// publish multiple messages
let messages = [
  'message 1',
  'message 2',
];
adapter.publishBatch('my_channel', messages);

Writing an Adapter

You can easily write your own custom adapter by implementing the PubSubAdapterInterface interface.

class CustomAdapter {
  /**
   * Subscribe a handler to a channel.
   *
   * @param {string} channel
   * @param {subscriberCallback} handler - The callback to run when a message is received
   * @example
   * adapter.subscribe('my_channel', (message) => {
   *   console.log(message);
   * });
   */
  subscribe(channel, handler) {

  }

  /**
   * Publish a message to a channel.
   *
   * @param {string} channel
   * @param {*} message - The message payload
   * @return {Promise<*>}
   * @example
   * // publish a string
   * adapter.publish('my_channel', 'Hello World');
   *
   * // publish an object
   * adapter.publish('my_channel', {
   *   'id': 1234,
   *   'first_name': 'Matthew',
   * });
   */
  publish(channel, message) {

  }

  /**
   * Publish multiple messages to a channel.
   *
   * @param {string} channel
   * @param {*[]} messages
   * @return {Promise<*>}
   * @example
   * let messages = [
   *   'message 1',
   *   'message 2',
   * ];
   * adapter.publishBatch('my_channel', messages);
   */
  publishBatch(channel, messages) {

  }
}

Examples

The library comes with examples for all adapters and a Dockerfile for running the example scripts.

Run make up.

You will start at a bash prompt in the /usr/src/app directory.

If you need another shell to publish a message to a blocking consumer, you can run docker-compose run js-pubsub /bin/bash

To run the examples:

$ node examples/LocalExample.js