[rabbitmq-discuss] [Architecture] Real-time feed with RabbitMQ and NodeJS
dexterp37 at gmail.com
Wed May 1 11:22:13 BST 2013
I'm trying to design a system which allows for real time notifications
(sms, email, browser) on some topics. I'm having some doubts about the
architecture and on how I'm planning to use RabbitMQ. I'm sorry if the
question is naive, but I'm a newbie of RabbitMQ!
==== Requirements ====
- User profiles are stored in a database. Each user profile contains the
name of up to 2 topic of interest (i.e. Server1.CPU and
- Topic name won't change often
- Agents can post messages to a certain topic of interest (i.e. post
messages to Server1.CPU or to Server1, the latter should be received by
everyone subscribed to Server1.CPU or Server1.SomethingElse)
- User get notified using based on their choice (SMS to the phone number
stored in their profile or to the email address. Could also be to the
- The system should be both vertically and horizontally scalable.
==== Architecture ====
(1) Agents -> (2) Thin NodeJS RESTful API -> (3) CouchDB -> (4)_changes ->
(5) CouchDB - RabbitMQ Bridge -> (6) Notifiers
1. Agents can be thought as services residing on a machine posting update
messages to certain topics through the exposed API
2. The exposed API, which allows to add messages to the database (CouchDB)
using a POST message call
3. CouchDB storing messages data, user data, etc.
4. A feed of changes coming from the DB which notifies (5) about new data
in the DB
5. This point is a bit tricky and is where I'm having some doubts.
I was thinking about using routing keys and topics (
http://www.rabbitmq.com/tutorials/tutorial-five-java.html ) and to let the
CouchDB-RabbitMQ nodejs application publish the messages to the queue
related to the topic of interest. Each queue acts as a task queue so that
the load can be distributed among different instances of notifiers for EACH
6. When a notifier consumes a messages, it gets the relevant data from the
database (i.e. mobile phone number for the SMS or twitter account name) and
notifies the user.
=== Questions ===
Is this a reasonable use case for RabbitMQ?
Is there any feature of RabbitMQ I'm misusing or not considering properly?
Is the queue organization in RabbitMQ correct?
Thank you for your help,
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the rabbitmq-discuss