- Built by bit.ly
- Written in Go
- Plain and simple (the one I really liked, not complex as RabbitMQ)
- Easy to set up, a very low learning curve
- Distributed and horizontally scalable
- Supports timeouts, back off and retries
- Inbuilt admin panel
NSQ vs RabbitMQ?
You may be thinking “Why NSQ instead of RabbitMQ?”.
The client libraries of RabbitMQ seems outdated and needs too much of learning and setup.
But to be frank, NSQ is just a subset or RabbitMQ. RabbitMQ is a more mature one and has a lot of features. However, we found that we just need a Simple Message Queue system, easy to set up, low learning curve and have good client libraries.
Who Uses NSQ?
NSQ is built by bit.ly worlds best URL shortener. It is also using by some big companies like:
Implement NSQ in NodeJS
We’ll setup NSQ, configure it in NodeJS, and write a small code that will basically create a reader and writer that will process the job.
Let’s dive in
Install and boot NSQ
Install NSQ is a little tricky. I lost too much time installing and configuring it. The easiest solution is using Docker Compose
Create a new file in your NodeJS project
Start NSQ using
docker-compose up -d
Add NSQ credentials to NodeJS
Add the following to your
If you’re new to
.env read my blog post – How I Setup Environment Variables in NodeJS
Create a Reader and Writer in NodeJS
Run the script using
Open the NSQ admin panel on http://127.0.0.1:4171/
What we did is created a
For example, when there
new_user (topic), multiple channels
send_slack_notification etc will be subscribed to it. All of these channels will receive the same user.
Writer publish to a topic, read subscribes to a channel inside a topic
What we’d setup is a very basic message queue. NSQ has a lot more features as I mentioned above. Go through the docs to know more in detail – nsqjs