Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@twilson63/palmetto-rmq

Package Overview
Dependencies
Maintainers
2
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@twilson63/palmetto-rmq

This module uses rabbitMQ as the pub/sub messaging component for palmetto flow applications.

  • 1.1.0
  • npm
  • Socket score

Version published
Weekly downloads
64
increased by3100%
Maintainers
2
Weekly downloads
 
Created
Source

Palmetto RMQ

This module uses rabbitMQ as the pub/sub messaging component for palmetto flow applications.

The default behavior works well if you want to have several subscribers that receive all messages.

Optional behavior is to utilize the roundRobin option to distribute the message to the subscribers in a round-robin fashion.

In either configuration you can optionally provide a publishOnly option. The returned instance will not receive any messages.

Build Status

usage

configure

var io = require('@twilson63/palmetto-rmq')({
  endpoint: 'amqp://guest:guest@localhost:5672',
  app: '<appname>',
  vhost: '<optional>'
})

subscribe

io.on('foobar', function (msg) {
  console.log(msg)
})

publish

io.emit('send', msg)

common patterns

frontend component query

var uuid = uuid.v4()
io.on(uuid, function (event) {
  console.log(event.object)
})
io.emit('send', {
  to: 'widget.all.request',
  from: uuid,
  subject: 'widget',
  verb: 'all',
  type: 'request',
  object: {}
})

backend service

io.on('widget.all.request', function (event) {
  // do work
  var results = ...

  io.emit('send', {
    to: event.from,
    subject: 'widget',
    verb: 'all',
    type: 'response',
    object: results
  })
})

The service listens to the widget.all.request svc then uses the from node to publish the response to.


Fetching response from scaled service

Requesting from a scaled load-balanced service instance
//requestor-service.js

var requestorIo = require('@twilson63/palmetto-rmq')({
  endpoint: 'amqp://guest:guest@localhost:5672',
  app: '<requestorServiceName>',
  vhost: '<optional>'
})

var handlerIo = require('@twilson63/palmetto-rmq')({
  endpoint: 'amqp://guest:guest@localhost:5672',
  app: '<handlerServiceName>',
  vhost: '<optional>',
  roundRobin: true,
  publishOnly: true // only the 'handlerService' will listen for messages
})                  // this instance shouldn't participate in `roundRobin` consumption


var uuid = uuid.v4()

//setup response msg handler
requestorIo.on(uuid, function (event) {
  console.log(event.object)
})

//send request msg
handlerIo.emit('send', {
  to: 'widget.all.request',
  from: uuid,
  subject: 'widget',
  verb: 'all',
  type: 'request',
  object: {}
})
Handling request in scaled load-balanced service
//handler-service.js
//multiple instances of this service running

var inboundIo = require('@twilson63/palmetto-rmq')({
  endpoint: 'amqp://guest:guest@localhost:5672',
  app: '<handlerServiceName>',
  vhost: '<optional>',
  roundRobin: true,   // all instances of 'handlerService' will get 'roundRobin' msg distribution
  publishOnly: false  // and obviously listen for those msgs
})

var requestorIo = require('@twilson63/palmetto-rmq')({
  endpoint: 'amqp://guest:guest@localhost:5672',
  app: '<requestorServiceName>',
  vhost: '<optional>'
})


//handle request messages
inboundIo.on(uuid, function (event) {

  doSomething(event.object)
    .then(resultObject => {

      requestorIo.emit('send', {
        to: event.from,
        from: event.to,
        subject: event.subject + '-response',
        verb: event.verb + '-response',
        type: 'response',
        object: resultObject
      })

    })
    .catch(error => {

      requestorIo.emit('send', {
        to: event.from,
        from: event.to,
        subject: event.subject + '-error',
        verb: event.verb + '-error',
        type: 'response',
        object: error
      })

    })
})


FAQs

Package last updated on 11 Jan 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc