Hi,<div><br></div><div>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!</div><div><br></div><div>==== Requirements ====</div><div>- User profiles are stored in a database. Each user profile contains the name of up to 2 &nbsp;topic of interest (i.e. Server1.CPU and Server3.RAM.Temperature).</div><div>- Topic name won't change often</div><div>- 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)</div><div>- 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 twitter account)!</div><div>- The system should be both vertically and horizontally scalable.</div><div><br></div><div>==== Architecture ====</div><div><br></div><div>(1) Agents -&gt; (2) Thin NodeJS RESTful API -&gt; (3) CouchDB -&gt; (4)_changes -&gt; (5) CouchDB - RabbitMQ Bridge -&gt; (6) Notifiers</div><div><br></div><div>1. Agents can be thought as services residing on a machine posting update messages to certain topics through the exposed API</div><div>2. The exposed API, which allows to add messages to the database (CouchDB) using a POST message call</div><div>3. CouchDB storing messages data, user data, etc.</div><div>4. A feed of changes coming from the DB which notifies (5) about new data in the DB</div><div>5. This point is a bit tricky and is where I'm having some doubts.&nbsp;</div><div><br></div><div>I was thinking about using routing keys and topics (&nbsp;<a href="http://www.rabbitmq.com/tutorials/tutorial-five-java.html">http://www.rabbitmq.com/tutorials/tutorial-five-java.html</a>&nbsp;) 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 topic.</div><div><br></div><div>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.</div><div><br></div><div>=== Questions ===</div><div>Is this a reasonable use case for RabbitMQ?</div><div>Is there any feature of RabbitMQ I'm misusing or not considering properly?</div><div>Is the queue organization in RabbitMQ correct?&nbsp;</div><div><br></div><div>Thank you for your help,</div><div>Dexter</div>