Any experienced system administrator knows that sometimes putting off tasks for later is very useful and even necessary, especially if the task is time-consuming and consumes a lot of resources. To do this, you need a message broker – a program that receives messages (tasks) from various senders (web applications), forms a queue from them, and then distributes them between work processes.
This article will focus on the RabbitMQ project – a bunch of open applications for implementing the functions of a message broker that implements the Advanced Message Queuing Protocol (AMQP).
Messages, message brokers and sequence
Messaging is a way of exchanging certain data between processes, applications, virtual and physical servers. These messages, which perform some computational functions, can contain almost anything, from plain text to large blocks of binary data. For the correct execution of this process, a third-party program is needed – this is the message broker.
A message broker is usually a group of applications, each individual component of which is designed to process a certain stage of messaging: to receive a message, define it in the queue, and transfer the message to the work process responsible for its execution. Often, instead of full-fledged solutions, programs are used that were not originally intended for this work (databases, cron daemon, etc.); they simply create a message queue (which technically represents infinite buffers), and then pass them for automatic processing or for polling.
Why do you need message broker?
Message brokers act as an intermediary between various services (web applications). They significantly reduce the load and shorten the delivery time of messages, since tasks that take some time to be processed are distributed between workflows designed exclusively to perform these tasks. They provide a reliable channel for transmitting messages from one application to another.
When do you need message broker?
In general, the basic functionality of message brokers covers many areas, including, but not limited to:
- Reducing the response time of web servers to requests (because they do not have to perform resource-intensive tasks).
- Distribution of the message to several recipients (for example, for processing).
- Offline users can later retrieve all the data.
- Completely asynchronous mode of operation with server systems.
- Ordering and prioritization of tasks;
- Load balancing between work processes.
- Improving the reliability and uptime of the application.
And much more.
A short review of RabbitMQ
RabbitMQ (released in 2007) is one of the most popular open-source message brokers licensed under the Mozilla Public License v1.1 as an implementation of the Advanced Message Queuing Protocol. Designed in Erlang, RabbitMQ is fairly easy to use and install.
How RabbitMQ work?
RabbitMQ provides an interface that connects senders (Publishers) with recipients (Consumers) using a broker that distributes the data in the appropriate lists – Message Queues.
APPLICATION EXCHANGE TASK LIST WORKER [DATA] -------> [DATA] ------> [D]+[D][D][D] ---> [DATA] Publisher EXCHANGE Queue Consumer
Benefits of RabbitMQ
Unlike other solutions, RabbitMQ is a full-fledged application stack, and not a simple base for the application of your choice. It provides all the necessary tools in the complex.
A short review of AMQP
AMQP (Advanced Message Queuing Protocol) is a widespread open standard for the distribution and transmission of messages. As a protocol and standard, it establishes a common framework for the interaction of various applications and message brokers and eliminates the problems caused by individual program design.
RabbitMQ packages are provided by CentOS / RHEL and Ubuntu / Debian. But, as a rule, such packages are outdated. Therefore, it is recommended to download and install RabbitMQ manually.
Install RabbitMQ in CentOS/RHEL
Before you begin installing RabbitMQ, you need to install the program dependencies, one of which is Erlang. However, first of all, it is necessary to update the system and standard applications; to do this, run:
# yum -y update
For Erlang installation you can use:
# Add and enable relevant application repositories: # Note: We are also enabling third party remi package repositories. wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm # Finally, download and install Erlang: yum install -y erlang
now you can install RabbitMQ:
# Download the latest RabbitMQ package using wget: wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.2/rabbitmq-server-3.2.2-1.noarch.rpm # Add the necessary keys for verification: rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc # Install the .RPM package using YUM: yum install rabbitmq-server-3.2.2-1.noarch.rpm
Install RabbitMQ on Ubuntu
The installation process of RabbitMQ in Ubuntu/Debian almost the same in on CentOS. First, you need to update software:
# apt-get update # apt-get -y upgrade
Add rabbitmq key:
# curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -
Do package update:
# apt-get update
Now you can install rabbitmq RabbitMQ:
$ sudo apt-get install rabbitmq-server
As mentioned earlier, the RabbitMQ broker is very easy to use. This section provides instructions for managing and configuring RabbitMQ.
Enabling the management console
The RabbitMQ Management Console (RabbitMQ Management Console) is one of the available plug-ins that allows you to monitor the processes of the RabbitMQ server through a graphical web-based user interface.
Using this console, you can:
- Manage messaging, message queues, connections, and users;
- Track message queues, connections, and message rates
- Send and receive messages;
- Track Erlang processes and memory usage;
And much more.
To enable RabbitMQ management run the command:
$ sudo rabbitmq-plugins enable rabbitmq_management
Now you can open management console in browser visiting your_ip:15672.
Default rabbitmq user – guest. Default rabbitmq password – guest
RabbitMQ management in CentOS/RHEL
To enable RabbitMQ autostart you need to run:
# chkconfig rabbitmq-server on
To start, stop, restart, and check status use commands below:
# start: /sbin/service rabbitmq-server start # stop: /sbin/service rabbitmq-server stop # restart: /sbin/service rabbitmq-server restart # status: /sbin/service rabbitmq-server status
RabbitMQ management in Ubuntu/Debian
To start, stop, restart, and check rabbitmq status on Ubuntu/Debian use commands below:
# start: service rabbitmq-server start # stop: service rabbitmq-server stop # restart: service rabbitmq-server restart # status: service rabbitmq-server status
Now your rabbitmq server is ready to use!
RabbitMQ comes with standard settings. In general, they are quite reliable and require no editing.