Explore NATS Queueing

NATS supports a form of load balancing using queue groups. Subscribers register a queue group name. A single subscriber in the group is randomly selected to receive the message.

Prerequisites

Go, node.js, ruby and the NATS server should be installed.

1. Start the NATS server

  1. nats-server

2. Clone the repositories for each client examples

  1. go get github.com/nats-io/nats.go
  2. git clone https://github.com/nats-io/nats.js.git
  3. git clone https://github.com/nats-io/nats.rb.git

3. Run the Go client subscriber, providing a queue group name

  1. cd $GOPATH/src/github.com/nats-io/nats.go/examples
  2. go run nats-qsub/main.go foo my-queue

4. Install and run the Node client subscriber with queue group name

  1. npm install nats
  2. cd nats.js/examples
  3. node node-sub --queue=my-queue foo

5. Install and run the Ruby client subscriber with queue group name

  1. gem install nats
  2. nats-queue foo my-queue &

6. Run another Go client subscriber without the queue group.

  1. cd $GOPATH/src/github.com/nats-io/nats.go/examples
  2. go run nats-sub/main.go foo

7. Publish a NATS message using the Go client

  1. cd $GOPATH/src/github.com/nats-io/nats.go/examples
  2. go run nats-pub/main.go foo "Hello NATS!"

8. Verify message publication and receipt

You should see that the publisher the message and prints: Published [foo] : ‘Hello NATS!’

You should see that only one of the my-queue group subscribers receives the message and prints it. In addition, the Go client subscriber not in the my-queue group should also receive and print the message.

9. Publish another message

  1. go run nats-pub/main.go foo "Hello NATS Again!"

You should see that a different queue group subscriber receives the message this time, chosen at random among the 3 queue group members.