RabbitMQ это широко используемый брокер сообщений с открытым исходным кодом, написан на языке программирования Erlang. Как message-oriented приложение, RabbitMQ может быть использован для работы с протоколом Advanced Message Queuing Protocol (AMQP) во всех современных операционных системах.
В этой статье я опишу как установить RabbitMQ в CentOS 7.
Исходные данные
- Сервер с CentOS 7
- Root доступ к серверу
- IP адрес сервера 192.168.1.155
Подключение репозитория EPEL
Выполните команду ниже, чтобы установить пакет epel-release и подключить репозиторий EPEL
yum install epel-release
Установка Erlang
Т.к. RabbitMQ написан на Erlang, нужно установить сам Erlang, чтобы вы могли использовать RabbitMQ.
Загрузим пакет, с помощью которого подключим репозиторий:
yum install http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
Теперь установим Erlang
yum install erlang
Проверим, что Erlang установился, выполните команду ниже
erl
В результате вы увидите сообщение о версии Erlang, чтобы выйти из консоли Erlang, используйте Ctrl+C
Установка RabbitMQ
Теперь установим RabbitMQ, он доступен в репозитории EPEL:
yum install rabbitmq-server
После установки, запустим RabbitMQ и добавим его в автозагрузку:
systemctl start rabbitmq-server systemctl enable rabbitmq-server
Проверим, что RabbitMQ запустился, это можно сделать с помощью команды:
rabbitmqctl status
Теперь добавим исключения в правила межсетевого экрана (по умолчанию в CentOS 7 — firewalld).
Для нормального функционирования требуется только порт TCP 5672, но также рекомендую открыть порты 4369/tcp, 5671/tcp, 35672-35682/tcp (подробнее о предназначении этих (и других) портов будет описано ниже).
firewall-cmd --permanent --add-port=5671/tcp --add-port=5672/tcp --add-port=4369/tcp --add-port=35672-35682/tcp firewall-cmd --reload
Отлично, RabbitMQ установили, а как управлять? Для этого нужно создать администратора, а также включить интерфейс управления.
Сначала подключим интерфейс управления, он доступен в качестве плагина, его можно активировать следующей командой:
rabbitmq-plugins enable rabbitmq_management
После этого интерфейс будет запущен на порту 15672/tcp, откроем его в межсетевом экране:
firewall-cmd --permanent --add-port=15672/tcp firewall-cmd --reload
Создадим администратора, присвоим ему роль и права.
К примеру создадим администратора с именем «admin» и паролем «adminpass«
rabbitmqctl add_user admin adminpass
Присвоим ему роль администратора:
rabbitmqctl set_user_tags admin administrator
И дадим доступ ко всему, внутри RabbitMQ:
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
Теперь вы можете зайти в браузере на порт 15672 вашего сервера, авторизоваться и увидеть интерфейс управления.
В моем случае интерфейс доступен по адресу: http://192.168.1.55:15672
Подробнее о портах и их предназначении
- 4369: порт epmd, используется для коммуникации между несколькими серверами RabbitMQ, а также при использовании консольных утилит
- 5672, 5671: используется клиентами для версий протокола AMQP 0-9-1 и 1.0 соответственно, без/с TLS
- 25672: используется для внутренней коммуникации, а также консольными утилитами. Задается динамически (к рабочему порту добавляется 20000). НЕ должен быть открыт наружу.
- 35672-35682: используется консольными утилитами, для связи с нодами. Задается динамически (к порту внутренней коммуникации (25672) добавляется + 10000, а также дополнительно открывается порт +10010)
- 15672: порт клиентов HTTP API, интерфейса управления (если плагин интерфейса управления подключен)
- 61613, 61614: порт клиентов STOMP без/с TLS (если плагин STOMP подключен)
- 1883, 8883: порт клиентов MQTT без/с TLS (если плагин MQTT подключен)
- 15674: порт клиентов STOMP-over-WebSockets (если плагин Web STOMP подключен)
- 15675: порт клиентов MQTT-over-WebSockets(если плагин Web MQTT подключен)
- 15692: порт метрик Prometheus (если плагин Prometheus подключен)
Вот и всё 🙂