1.0.4 • Published 6 years ago

nats-nerve v1.0.4

Weekly downloads
103
License
MIT
Repository
github
Last release
6 years ago

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:

OptionExample ValueDescription
startWithLastReceivedtrueSubscribe starting with the most recently published value
deliverAllAvailabletrueReceive all stored values in order
startAtSequence22Receive all messages starting at a specific sequence number
startTimenew Date(2016, 7, 8)Subscribe starting at a specific time
startAtTimeDelta30000Subscribe 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.