Why NSQ?
- 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
Step 1
Install Docker (Ubuntu, Mac) and Docker Compose
Step 2
Create a new file in your NodeJS project docker-compose.yml
Step 3
Start NSQ using docker-compose up -d
Add NSQ credentials to NodeJS
Add the following to your .env
file.
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 node nsq.js
Open the NSQ admin panel on http://127.0.0.1:4171/
What we did is created a new_user
send_email
For example, when there new_user
(topic), multiple channels send_email
send_to_crm
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
Note: Make msg.finish()
Conclusion
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