NATS Plugin for Spawnpoint on NPM
Make sure to install NATS and the plugin for Spawnpoint NATS separately. NATS is treated as a peer dependency so you can change version separately.
npm i nats spawnpoint-nats
- This module's version
2.x.x
is designed for a NATS server running2.x
- This module's version
1.x.x
is designed for a NATS server running1.x
This api is mounted at app.nats
to access these methods:
Sends a message to a subscriber. Expects no response. Callback issued when message is sent to the NATS server. No guarantee of receipt.
subject
string - subject to publish message tomessage
object|array|string|buffer - Message body for published messagecallback
function - Optional callback fired when sent
Sends a message to a subscriber with the expectation of at least one reply. Main callback only listens for the final reply. Can get updates to provide realtime stats/progress and/or acknowledgments to reset timeouts. Returns event emitter for update
, ack
, response
, & timeout
events.
subject
string - subject to publish message tomessage
object|array|string|buffer - Message body for published messageoptions
object - Options passed toPUB
method.max
number - Number of replies to receive before unsubscribing from replies, optionaltimeout
number - Number of ms to wait until firing a timeout error. If omitted it will default to config settings. Setting to falsey value will disable timeout
callback
function - Optional callback fired when final response is sent. Callback includes two argumentserr
error|null - If the response failed via timeout or was reported as an error from the response.results
*object|array|string|buffer - Response body
updateCallback
function - Optional callback fired when update is sent. Callback includes one argumentresults
object|array|string|buffer - Response body
app.nats.request('lookup', {
domain: "google.com"
}, function(err, results){
if(err){
return console.error('ERROR', err);
}
console.log('Lookup results', results);
}, function(update){
console.log('update', update);
});
Sends a message to a subscriber with the expectation of at least one reply. Main callback only listens for the final reply. Can get updates to provide realtime stats/progress and/or acknowledgments to reset timeouts. Returns event emitter for update
, ack
, response
, & timeout
events.
subject
string - subject to subscribe tooptions
object - Options passed toPUB
method.queue
string - Name of queue to joinmax
number - Maximum number of messages to receive before automatically unsubscribing.noAck
boolean - Prevents automaticack
message when set to true. Defaults to false.noPrefix
string - Prevents configurable prefix string from adding to subject. Defaults to false.
callback
function - callback fired when messages are received. Callback includes two argumentsresponse
object|array|string|buffer - Message bodyhandler
eventEmitter - Event emitter with helper methods to handle updates, acks, and replies.- Emittable EVENTS - These events need to be emitted to send messages
ack
- timeout int: Resets the timeout for the request. If not timeout is specified it will reset the timer that was used by the requester.timeout
is in ms.update
- data string: Sends a message with data update the request. Also resets the timeout.response
- err error|null, results object|array|string|buffer: Sends an error or response to the request
- Helper Methods - These methods are helper methods to make emitting the events above easier
ack()
: Tells the request to reset timeout, has no body or data to sendupdate(data *string*)
: Sends a message with data update the request. Also resets the timeout.response(err *error|null*, results *object|array|string|buffer*)
: Sends an error or response to the request
- Emittable EVENTS - These events need to be emitted to send messages
subject
string - Copy of the message subject. Useful for wildcard subscriptions. Does not include prefix where applicable.
app.nats.handle('lookup', {
queue: "dns.lookup"
}, function(msg, handler){
setTimeout(function(){
handler.ack();
}, 2500);
setTimeout(function(){
handler.update({
pending: true
});
}, 5000);
setTimeout(function(){
handler.response(null, msg);
}, 7500);
});