Используемые термины: RabbitMQ , Linux , Ubuntu .
В данной инструкции мы разберемся, как работать с брокером сообщений RabbitMQ. Для начала мы выполним установку программного обеспечения на Linux Ubuntu, после настроим его и рассмотрим пример использования.
Установка RabbitMQ
Базовая настройка
Настройка для подключения к серверу по сети
Пример использования на Python
Работа с RabbitMQ в docker
Сервер RabbitMQ есть в стандартном репозитории Ubuntu, поэтому можно сразу выполнить установку с помощью apt. Однако, версия в репозитории может быть не самой актуальной . Поэтому мы рассмотрим процесс с настройкой официального репозитория для установки RabbitMQ.
Для начала установим curl:
apt install curl
После выполныем две команды:
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.deb.sh | sudo bash
В нашу систему будут добавлены репозитории для установки RabbitMQ и erlang.
Теперь можно устанавливать брокер:
apt install rabbitmq-server
Однако, в моем случае возникла проблема с репозиторием erlang. Если вы столкнетесь с той же проблемой, можно вручную установить необходимые пакеты или отказаться от использования официального репозитория.
После установки брокера на Ubuntu, он автоматически будет запущен и настроен для автозапуска. Проверить можно командой:
systemctl status rabbitmq-server
Переходим к настройке.
Нам нужно создать виртуальный хост для изоляции рабочего пространства, а также пользователя, которому дадим полный доступ на созданный виртуальный хост.
Создание последнего выполняется командой:
rabbitmqctl add_vhost test_host
* в данном примере мы создадим тестовый хост test_host .
Список всех хостов можно увидеть командой:
rabbitmqctl list_vhosts
Создаем пользователя:
rabbitmqctl add_user test_user
Система запросит ввод пароля. Придумываем и вводим его.
Поменять пароль мы можем командой:
rabbitmqctl change_password test_user
* в данном примере мы поменяем пароль для пользователя test_user .
Удалить учетную запись можно командой:
rabbitmqctl delete_user test_user
* для пользователя test_user .
Теперь дадим права созданному пользователю к созданному виртуальному хосту:
rabbitmqctl set_permissions -p test_host test_user «.*» «.*» «.*»
Сделаем нашего пользователя администратором:
rabbitmqctl set_user_tags test_user administrator
Разрешаем консольную команду rabbitmqadmin:
rabbitmq-plugins enable rabbitmq_management
Выполним тестовый запрос
rabbitmqadmin -u test_user -p test list vhosts
Мы должны увидеть что-то на подобие:
+————-+———-+
| name | messages |
+————-+———-+
| / | |
| test_host | |
+————-+———-+
По умолчанию, сервис запускается для работы как на локальном сервере, так и обработки запросов по сети. Но нам нужно убедиться в работоспособности прохождения сетевых запросов.
Если на нашем сервере используется брандмауэр, разрешаем порт 5672:
iptables -I INPUT -p tcp —dport 5672 -j ACCEPT
Для сохранения правила используем утилиту iptables-persistent:
apt-get install iptables-persistent
netfilter-persistent save
Для простоты, мы запустим скрипт для отправки сообщения в очередь и приемки на одном и том же компьютере, куда установили сервер rabbitmq. Сам пример, в большей степени, взят с официального сайта .
Установим питон и необходимые компоненты:
apt install python3 python3-pip
Обновляем менеджер пакетов pip:
pip3 install —upgrade pip
Устанавливаем библиотеку pika для работы с RabbitMQ:
pip3 install pika
Создадим каталог, в котором мы создадим скрипты:
mkdir /scripts
Создадим скрипт для отправки информации в очередь:
vi /scripts/rabbit_test_send.py
Пример скрипта:
* где:
Разрешаем запуск скрипта:
chmod +x /scripts/rabbit_test_send.py
И запустим его:
/scripts/rabbit_test_send.py
Теперь мы можем посмотреть состояние очереди из командной строки Linux.
rabbitmqadmin -u test_user -p test list queues
Мы увидим, примерно, такую картину:
+——-+———-+
| name | messages |
+——-+———-+
| hello | 1 |
+——-+———-+
* обратите внимание, что сообщение в очередь могут попадать с задержкой (2-3 секунды). Если мы увидим 0 сообщений, немного подождем.
Теперь создадим скрипт для получения сообщения:
vi /scripts/rabbit_test_recieve.py
С содержимым:
* где:
Разрешаем запуск скрипта:
chmod +x /scripts/rabbit_test_recieve.py
И запустим его:
/scripts/rabbit_test_recieve.py
На экране должно появиться наше сообщение. Чтобы прервать выполнение скрипта, нажимаем CTRL+C (на экране появится некрасивый вывод, но это не страшно в рамках нашего теста).
Снова смотрим очередь:
rabbitmqadmin -u test_user -p test list queues
Она должна стать пустой.
Брокер может быть запущен как контейнер docker. Рассмотрим процесс запуска с использованием docker-compose.
Для начала нужно установить как docker, так и docker-compose — подробнее читайте в инструкции Установка Docker на Linux .
Предположим, что рабочий каталог для RabbitMQ будет /opt/rabbitmq . Созданим и перейдем в него:
mkdir /opt/rabbitmq
cd /opt/rabbitmq
Создадим файл docker-compose:
vi docker-compose.yml
services:
rabbitmq:
image: rabbitmq:latest
container_name: rabbitmq
hostname: rabbitmq
restart: unless-stopped
environment:
TZ: Europe/Moscow
RABBITMQ_DEFAULT_USER: root
RABBITMQ_DEFAULT_PASS: 12345678
RABBITMQ_DEFAULT_VHOST: vdata
volumes:
— ./rabbitmq:/var/lib/rabbitmq
ports:
— 5672:5672
* В данном примере мы:
Для запуска контейнера вводим команду:
docker-compose up -d
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…