Introduction
Installing RabbitMQ
using standard installer (available here) is quite easy and the recommended way of setting up the server. But there could be scenarios or situations when you would like to customize the installation. For instance, you may have a requirement to package RabbitMQ
along with the product you want to ship, or you wish to write batch scripts. Well, this article touches on the important areas which will help you customize the installation and packaging.
RabbitMQ
documentation explains every aspect of this in detail. This article compiles and summarizes the steps with an objective to make you understand the process and dependencies.
Download Details
You first need to download the following:
- Download Erlang OTP 19.0 (click here).
- Download
RabbitMQ
3.6.5 manual zip package (click here) (rabbitmq-server-windows-3.6.5.zip)
Note: Erlang OTP & RabbitMQ
versions mentioned above were latest when I wrote this article.
Installation Steps
Step 1
Install Erlang OTP by following the directions in the installation wizard. It will also prompt you to install Microsoft VC++ 2013 redistributable if your system does not have it already.
Step 2
Extract rabbitmq-server-windows-3.6.5.zip and copy it to C:\MyMessageBroker\Install. Please note that you can choose any location on your system. For the sake of understanding, let’s assume this location. The steps below also reference the same location.
Step 3
Set ERLANG_HOME
environment variable to where you actually put your Erlang installation, e.g. C:\Program Files\erlx.x.x (full path).
(The RabbitMQ
batch files are expected to execute %ERLANG_HOME%\bin\erl.exe.)
Step 4
Set RabbitMQ
environment variable:
Note: In case you are setting up cluster on a single machine, you will have to ensure all nodes have unique ports. In the next section, we will setup cluster of two nodes.
Set the following environment variables:
RABBITMQ_NODE_PORT
- The port number on which RabbitMQ
service will listen. The default value for this is 5762
RABBITMQ_DIST_PORT
- This is used for inter-node and CLI tool communication. The value is set by adding 20000 to the value of RABBITMQ_NODE_PORT
variable. However, if you wish to use configuration files, then the values provided there will be used. For more information, see “Networking” section of RabbitMQ
documentation. Let’s set the value as (RABBITMQ_NODE_PORT + 20000) 25672
RABBITMQ_SERVICENAME
- When you use the default installer, RabbitMQ
installs Windows service with name “RabbitMQ
”. However, we can change this by setting value to RABBITMQ_SERVICENAME
variable. Set value for RABBITMQ_SERVICENAME
as “MyMessageBroker
”. RABBITMQ_BASE
- Set the RABBITMQ_BASE
variable value of the path where we extracted the zip package C:\MyMessageBroker\Install RABBITMQ_NODENAME
- Node name should always be unique. The qualified node name format is “MyNode1@MachineName
”. The value for this variable can be “MyNode1
” , for instance, and it will internally derive the qualified name. Let's set the value "MyNode1
" for this variable. RABBITMQ_CONFIG_FILE
- Set RABBITMQ_CONFIG_FILE
variable as %RABBITMQ_BASE%\rabbitmq. This path indicates the base directory location and primary name of the configuration file. That is, the primary name here is “rabbitmq
” which will be referenced as “rabbitmq.config” at base location. - Similarly, set the values for all the variables listed in the list below with the corresponding values:
RABBITMQ_MNESIA_BASE = %RABBITMQ_BASE%\db
RABBITMQ_MNESIA_DIR = %RABBITMQ_MNESIA_BASE%\%RABBITMQ_NODENAME%
RABBITMQ_LOG_BASE = %RABBITMQ_BASE%\log
RABBITMQ_LOGS = %RABBITMQ_LOG_BASE%\%RABBITMQ_NODENAME%.log
RABBITMQ_SASL_LOGS = %RABBITMQ_LOG_BASE%\%RABBITMQ_NODENAME%-sasl.log
RABBITMQ_PLUGINS_DIR = %RABBITMQ_BASE%\plugins
RABBITMQ_ENABLED_PLUGINS_FILE = %RABBITMQ_BASE%\enabled_plugins
Step 5
After completing the entire configuration above, install RabbitMQ
as windows service. Open the command window (as administrator) and navigate to the “sbin” directory located at the base location, i.e., C:\MyMessageBroker\Install\sbin.
Execute the following command to install the service:
$> rabbitmq-service install
After successfully completing Step 5, our messaging server is up and running. You can open the services console and locate “MyMessageBroker
” service in the list.
Creating a Cluster
We can follow the above 5 steps on another machine with different Node Name (say MyNode2
) and then join this node to form a cluster. We have to ensure that on the second machine, we have the same erlang cookie value.
In case of clustering, the nodes (and CLI tools) authenticate each other using the Erlang cookie. It is a plain text file with the some value. The name of this file is “.erlang.cookie”
On Windows, the locations are:
- C:\Users\Current User\.erlang.cookie (%HOMEDRIVE% + %HOMEPATH%\.erlang.cookie), or C:\Documents and Settings\Current User\.erlang.cookie, and
- C:\Windows\.erlang.cookie for RabbitMQ Windows service
Since RabbitMQ
is installed as Windows service, the cookie should be placed at both the locations.
On the second machine, locate and edit the ".erlang.cookie" file and set the value that matches the value on the first machine.
After completing the 5 steps above and setting the cookie value, open command window and navigate to “sbin
” location. Then, execute the following commands to join with first node:
$> rabbitmqctl stop_app
Executing the above command will stop the node. Now you can use join_cluster
command to form cluster:
$> rabbitmqctl join_cluster MyNode1@MachineName
The successful execution of the above command will display message that will look like this:
$> ....Clustering node MyNode2@MachineName with [MyNode1@MachineName] ...done
You can then check the status of cluster by issuing the following command:
$> rabbitmqctl cluster_status
We have completed the RabbitMQ
manual installation with clustering enabled. After you install and run Management plug in, you will see two nodes in the "Overview" section.
Hope this article has helped you get started with the RabbitMQ
manual installation.
Happy learning!! :-)