hemera-nsq

4.0.0 • Public • Published

Hemera-nsq package

npm styled with prettier

This is a plugin to use NSQ with Hemera.

NSQ promotes distributed and decentralized topologies without single points of failure, enabling fault tolerance and high availability coupled with a reliable message delivery guarantee. It is complementary to the primary NATS transport system.

The client use JSON to transfer data.

Start NSQ with Docker

Steps

How does it work with NATS and Hemera

We use a seperate topic for each NSQ Topic/Channels because with that you can listen in every hemera service for events. Every message will be forwarded to the NATS subscriber. As you can see NSQ give you new possibilities how to distribute your data but without lossing the benefits of nats-hemera with regard to load balancing and service-discovery.

Install

npm i hemera-nsq --save

Example

hemera.use(require('hemera-nsq'), {
  nsqReader: {
    lookupdHTTPAddresses: [
      'http://localhost:4161'
    ]
  },
  nsqWriter: {
    host: 'localhost',
    port: 4150
  }
})
 
hemera.ready(() => {
  // create subscriber which listen on NSQ events
  // can be subcribed in any hemera service
  hemera.add({
    topic: 'nsq.newsletter.germany',
    cmd: 'subscribe'
  }, function (req, reply) {
    this.log.info(req, 'Data')
 
    // ACK Message, if you pass an error the message is reququed
    reply(/* new Error('test') */)
  })
 
  // create NSQ subscriber
  hemera.act({
    topic: 'nsq',
    cmd: 'subscribe',
    subject: 'newsletter',
    channel: 'germany'
  }, function (err) {
    if (err) {
      this.log.error(err)
      return
    }
 
    this.log.info('Subscribed ACK')
  })
 
  // Send a message to NSQ
  hemera.act({
    topic: 'nsq',
    cmd: 'publish',
    subject: 'newsletter',
    data: {
      to: 'klaus',
      text: 'You got a gift!'
    }
  }, function (err) {
    if (err) {
      this.log.error(err)
      return
    }
 
    this.log.info('Publish ACK')
  })
})

Requirements

  • node >=6.0.0 - Due to the rewrite of the nsqjs module only Node >= 6 is supported.

Interface


publish

The pattern is:

  • topic: is the service name to publish to nsq
  • cmd: is the command to execute publish
  • subject: the name of the NSQ topic string
  • data: the data to transfer object

Example:

hemera.act({
  topic: 'nsq',
  cmd: 'publish',
  subject: 'newsletter',
  data: {
    to: 'klaus',
    text: 'You got a gift!'
  }
}, ...)

Create subscriber

The pattern is:

  • topic: is the service name to publish to nsq
  • cmd: is the command to execute subscribe
  • subject: the name of the NSQ topic string
  • channel: the name of the NSQ channel string

Example:

hemera.act({
  topic: 'nsq',
  cmd: 'subscribe',
  subject: 'newsletter',
  channel: 'germany'
}, ...)

Consume events

The pattern is:

  • topic: is a combination of the subject and channel name nsq.<subject>.<channel>
  • cmd: is the command to execute subscribe

Example:

hemera.add({
  topic: 'nsq.newsletter.germany',
  cmd: 'subscribe'
}, ...)

Readme

Keywords

none

Package Sidebar

Install

npm i hemera-nsq

Weekly Downloads

1

Version

4.0.0

License

MIT

Unpacked Size

8.43 kB

Total Files

5

Last publish

Collaborators

  • starptech