RabbitMQ cluster on a single machine

If you are having problems setting up a cluster on a single machine then the following post might help answer some questions.

I assume that you have already set up RabbitMQ on your local machine (rabbit@localhost) and want to know how to add two more nodes and cluster them.

These instructions relate to the installation on a MacBook Pro running OS X Yosemite.

As you already have an installation of RabbitMQ all you need to do is instantiate instances on new nodes. The following command will instantiate an instance of Rabbit on a node called hare@localhost.

    RABBITMQ_NODE_PORT=5674 
        RABBITMQ_NODENAME=hare@localhost 
        rabbitmq-server &

Ensure the port number is different to the port currently in use.

A sticking point are the ports bound by Rabbit to plug-ins. You might see the following error:

BOOT FAILED
===========

Error description:
 {could_not_start,rabbitmq_mqtt,
    {{shutdown,
      {failed_to_start_child,'rabbit_mqtt_listener_sup_:::1883',
         {shutdown,
            {failed_to_start_child,tcp_listener,
              {cannot_listen,{0,0,0,0,0,0,0,0},1883,eaddrinuse}}}}},
     {rabbit_mqtt,start,[normal,[]]}}}

This means that the Rabbit MQTT for the currently running node is using port 1883.

BOOT FAILED
===========

Error description:
 {could_not_start,rabbitmq_stomp,
    {{shutdown,
        {failed_to_start_child,'rabbit_stomp_listener_sup_:::61613',
           {shutdown,
              {failed_to_start_child,tcp_listener,
         {cannot_listen,{0,0,0,0,0,0,0,0},61613,eaddrinuse}}}}},
     {rabbit_stomp,start,[normal,[]]}}}

This means that the Rabbit STOMP for the currently running node is using port 61613.

To resolve this conflict add an argument to RABBITMQ_SERVER_START_ARGS specifying a new port for the plug-in.

A list of installed plug-in is shown in the RabbitMQ web interface in the overview tab under ports and contexts.

The following shows how to configure ports for the Rabbit management and Rabbit MQTT

RABBITMQ_NODE_PORT=5674 
    RABBITMQ_NODENAME=hare@localhost 
    RABBITMQ_SERVER_START_ARGS="
        -rabbitmq_management listener [{port,15674}] 
        -rabbitmq_mqtt tcp_listeners [1884]" 
    rabbitmq-server &

 

Now add the node to the cluster. Stop the instance, join it to another node and start.

rabbitmqctl -n hare@localhost stop_app

rabbitmqctl -n hare@localhost join_cluster rabbit@localhost

rabbitmqctl -n hare@localhost start_app

 

Resources

 

 

 

 

Devoxx UK 2015: How Java EE has changed design pattern implementation

Thank you to all who attended my quickie talk at Devoxx UK today. Here are the slides from my presentation. If you would like to purchase a copy of our book entitled: Professional Java EE design patterns which covers all topics from my talk and much more you can get a 40% discount with promo code VBK43 when ordering through wiley.com valid until 1st September.

Positive Book Review

Another positive book review from a very satisfied reader of our book:

“Recently joined a startup to design and develop a new analytics software heavily using OO Design patterns, this book helped a lot to grasp and review concepts…”  see review

To get you own copy of Professional Java EE Design Patterns visit Amazon.com.

Singleton Pattern in Java EE

The singleton pattern is one of the most well known design patterns and is used extensively by frameworks such as Spring. Java EE offers an elegant and easy way to implement the singleton pattern. By adding the @Singleton annotation to a class you can turn it into a singleton bean as shown in the following article about the singleton pattern implemented in Java EE.