hemera-nsq v4.0.0
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 --saveExample
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 tonsqcmd: is the command to executepublishsubject: the name of the NSQ topicstringdata: 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 tonsqcmd: is the command to executesubscribesubject: the name of the NSQ topicstringchannel: 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'
}, ...)8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago