Skip to content

Jesses Software Engineering Blog

Nov 18

Jesse

Ubuntu RabbitMQ Install

Often times when developing robust web applications the need arises to be able to asynchronously process information. Large tasks, such as report aggregation, that would cause a web front end to stall can be done asynchronously on a set schedule, or as a reaction to an event, allowing for clients to just consume data and not worry about formatting or processing it.

While there are numerous ways of doing this, a message queue is a very common approach. Messages, or queued tasks, are sent over a network to be stored for future processing. RabbitMQ is a messaging broker, giving an application a common platform (server) to send and receive messages. The RabbitMQ server offers a safe place for messages to live and has numerous configuration options for defining message communication protocol, advanced cluster configurations, user management, monitoring GUI, and much more.

Server Installation

RabbitMQ has an Ubuntu repo but requires erlang which it does not always install. The following steps will install the RabbitMQ server on Ubuntu 14.04.

sudo apt-get update

# install erlang
sudo apt-get install erlang -y
sudo apt-get install erlang-nox -y

# get deb package
echo deb http://www.rabbitmq.com/debian/ testing main | sudo tee /etc/apt/sources.list

# add key
wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add rabbitmq-signing-key-public.asc

# install server
sudo apt-get update
sudo apt-get install rabbitmq-server -y

Start the server and verify it is running:

sudo service rabbitmq-server start
sudo service rabbitmq-server status

Next install the management GUI:

sudo rabbitmq-plugins enable rabbitmq_management

By default the management GUI can be accessed via port 15672, using guest/guest as the user/pwd. NOTE: RabbitMQ does not allow remote login using the guest user.

Add Management User

If RabbitMQ was installed on a remote server, or Vagrant, the guest credentials will not work as guest can only connect over the loopback interface (localhost). This can be changed view the loopback_users config, or a new user can be created using the rabbitmqctl command line tool.

To create a new user

sudo rabbitmqctl add_user admin p@ssw0rd! 
sudo rabbitmqctl set_user_tags admin administrator 
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
sudo rabbitmqctl delete_user guest

sudo service rabbitmq-server restart

For more information on the various tags

For more information on the permissions

The web GUI should now be accessible to the new user:

http://127.0.0.1:15672/

Remote Access

When the RabbitMQ management GUI is installed remotely, the server will likely need to be updated to allow traffic through port 15672. This can be done by adding the following rule to the iptables

# add rule, restart service
sudo iptables -A INPUT -p tcp --dport 15672 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo service ufw reload

# verify port is listening
netstat -tulpn

tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      -

When using a managed service, such as an AWS EC2, a security group entry should be created for that instance:

Custom TCP Rule		TCP		15672			0.0.0.0/0

Conclusion

The ability to run asynchronous processes is essential to large scale web development projects. RabbitMQ is extremely robust and flexible for setting up a message broker system for storing and delivering messages. There are also numerous API wrappers written in various different languages to allow RabbitMQ to easily integrate into different code bases. Now that the RabbitMQ server has been installed the next steps would be to install clients and set up the queues.

Blog Powered By Wordpress