hemera-nsq
v4.0.0
Published
This is a plugin to use NSQ with Hemera
Downloads
14
Readme
Hemera-nsq package
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
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 tonsq
cmd
: is the command to executepublish
subject
: the name of the NSQ topicstring
data
: the data to transferobject
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 tonsq
cmd
: is the command to executesubscribe
subject
: the name of the NSQ topicstring
channel
: the name of the NSQ channelstring
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 namensq.<subject>.<channel>
cmd
: is the command to executesubscribe
Example:
hemera.add({
topic: 'nsq.newsletter.germany',
cmd: 'subscribe'
}, ...)