RabbitMQ and Node.js Hello World

Getting Started

A basic messaging application consists of 3 parts, the Publisher,the Broker, and the Consumer. The Publisher publishes messages to the broker, the broker decides which consumer will receive the message and the consumer processes the message. I have been exploring different kinds of applications that would help me make a robust messaging application. RabbitMQ is loaded with features that allow you to make all sorts of robust messaging patterns so I decided to use RabbitMQ. The following is an example of a basic application that utilizes RabbitMQ as a broker.

Publisher

publisher.js

The publisher.js will create messages and publishes them to RabbitMQ to be brokered.

///RabbitMQ nodejs library
var amqp = require('amqp');

///Create a connection to your RabbitMQ
var connection = amqp.createConnection();

///Connection is ready
connection.on('ready', function() {

  console.log('Server Connected');
  var exchange = conn.exchange('order', {
    type: 'topic', ///This is the type of exchange I want to use
    confirm: true
  }, function() {
    console.log('Exchange connected');
    var i = 0;
    ///Simulating messages being published
    setInterval(function() {
      i++;
      console.log(i)
      exchange.publish('task_queue', 'Hello World! ' + i, {
        durable: true,
      }, function(res) {
        console.log('confirmed ',res);
      });
    }, 1000);
  })
})

##Broker ##### RabbitMQ The Broker is going to be RabbitMQ.

Install on MacOSX

brew install rabbitmq

For more detailed instructions follow this link
https://www.rabbitmq.com/install-homebrew.html

Then launch the server in your terminal

rabbitmq-server

##Consumer ##### consumer.js Create one more file and call it the consumer.js. Consumer.js will receive the messages that are brokered by RabbitMQ. ``` var amqp = require('amqp'); ///connect to rabbitmq var connection = amqp.createConnection(); ///connection is ready connection.on('ready', function() { ///connect to the queue connection.queue('task_queue', { autoDelete: false, confirm: true }, function(queue) { ///get the exchange connection var exchange = connection.exchange('order', { type: 'topic' }); ///bind the queue to the exchange. THIS IS VERY IMPORTANT queue.bind(exchange, 'task_queue') console.log(' [*] Waiting for messages. To exit press CTRL+C'); ///subscribe to the queue queue.subscribe({ ack: true }, function(msg, cb) { console.log(cb) console.log(" [x] Received %s", msg.data.toString('utf-8')); setTimeout(function() { ///Done processing the message. queue.shift() }, 5000); }); }); }); ```
###Everything Working Together Lets get this application working. Open a terminal and run node against the publisher.js file. ``` node publisher.js ``` If everything was done right, you should see *Hello World* printed incrementally in your terminal. Then in another terminal, run node against the consumer.js file. ``` node consumer.js ``` You should see *[x] Received Hello World* printed incrementally in your terminal. You can also run node against additional consumer.js and you will notice how RabbitMQ redistributes the messages to the new consumers. Pretty cool right?

Enjoy