Skip to content

KualiCo/nats-nerve

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

npm version codecov

nats-nerve

High level driver for nats-streaming-server.

Nerve makes sending and receiving messages easy. The example below demonstrates:

  • Creating a persistent connection to the Nats Streaming Server
  • Creating a subscription to a channel
  • Publishing a message to a channel
const { getInstance } = require('nats-nerve')
const SERVER = 'nats://127.0.0.1:4222'
const CLUSTER = 'test-cluster'
const APP_NAME = 'test'

async function test() {
  const nerve = await getInstance(SERVER, CLUSTER, APP_NAME)
  const subscription = nerve.subscribe('channel', message => {
    console.log(message.getData())
  })
  await nerve.publisher.publish('channel', 'Hello, World!')
}

test()

Durable Subscriptions

Nats Streaming Server will keep track of the messages that have been delivered to your client if you configure a durable subscription:

...
const opts = { durableName: 'keepers' }
const subscription = nerve.subscribe(channel, opts, message => {
  console.log(message.getData())
})
...

The subscription can be suspended:

await subscription.close()

Re-subscribing to a suspended (or closed) subscription picks up any undelivered messages. It is done simply by re-creating the durable subscription:

...
const opts = { durableName: 'keepers' }
const subscription = nerve.subscribe(channel, opts, message => {
  console.log(message.getData())
})
...

Durable subscriptions can be reset or discarded by unsubscribing:

...
await new Promise(resolve => {
  subscription.unsubscribe()
  subscription.on('unsubscribed', resolve)
})
...

Durable subscriptions have more delivery options. These should be specified on the options object passed to the subscribe function. They are:

Option Example Value Description
startWithLastReceived true Subscribe starting with the most recently published value
deliverAllAvailable true Receive all stored values in order
startAtSequence 22 Receive all messages starting at a specific sequence number
startTime new Date(2016, 7, 8) Subscribe starting at a specific time
startAtTimeDelta 30000 Subscribe starting at a specific amount of time in the past (e.g. 30 seconds ago)

Groups (Clustered Clients)

Nats Streaming Server can send a message to a single client amongst a group. This can be done by configuring the subscription with a group like this:

...
const subscription = nerve.subscribe(channel, 'myGroupName', message => {
  console.log(message.getData())
})
...

About Nerve

I called it nerve because it passes messages like your nervous system. I thought this was really clever the first time that I thought of it: _N_ats _E_vent _R_eceptor, _V_alidator and _E_mitter.

About

High level driver for nats-streaming-server.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published