Установка и настройка RabbitMQ на Ubuntu

Используемые термины: RabbitMQ , Linux , Ubuntu .

В данной инструкции мы разберемся, как работать с брокером сообщений RabbitMQ. Для начала мы выполним установку программного обеспечения на Linux Ubuntu, после настроим его и рассмотрим пример использования.

Установка

Сервер 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

Пример подключения с использованием Python

Для простоты, мы запустим скрипт для отправки сообщения в очередь и приемки на одном и том же компьютере, куда установили сервер rabbitmq. Сам пример, в большей степени, взят с официального сайта .

Установим питон и необходимые компоненты:

apt install python3 python3-pip

Обновляем менеджер пакетов pip:

pip3 install —upgrade pip

Устанавливаем библиотеку pika для работы с RabbitMQ:

pip3 install pika

Создадим каталог, в котором мы создадим скрипты:

mkdir /scripts

Создадим скрипт для отправки информации в очередь:

vi /scripts/rabbit_test_send.py

Пример скрипта:

  1. #!/usr/bin/env python3
  2. # -*- encoding: utf-8 -*-
  3. import pika
  4. credentials = pika.PlainCredentials(‘test_user’, ‘test’)
  5. parameters = pika.ConnectionParameters(‘localhost’, 5672, ‘test_host’, credentials)
  6. connection = pika.BlockingConnection(parameters)
  7. channel = connection.channel()
  8. channel.queue_declare(queue=’hello’)
  9. channel.basic_publish(exchange=», routing_key=’hello’, body=’Hello World!’)
  10. connection.close()
  11. print(«Your message has been sent to the queue.»)

* где:

  • строки 6-8: задаем параметры для подключения к нашему серверу сообщений. Обратите внимание, что мы используем логин и пароль для созданного ранее пользователя test_user . Также мы подключаемся к созданному хосту test_host .
  • строки 10-12: подключаемся к серверу, создаем очередь с названием hello и отправляем в очередь сообщение Hello World!

Разрешаем запуск скрипта:

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

С содержимым:

  1. #!/usr/bin/env python3
  2. # -*- encoding: utf-8 -*-
  3. import pika
  4. credentials = pika.PlainCredentials(‘test_user’, ‘test’)
  5. parameters = pika.ConnectionParameters(‘localhost’, 5672, ‘test_host’, credentials)
  6. connection = pika.BlockingConnection(parameters)
  7. channel = connection.channel()
  8. channel.queue_declare(queue=’hello’)
  9. def callback(ch, method, properties, body):
  10. print(«Received %r» % body)
  11. channel.basic_consume(queue=’hello’, auto_ack=True, on_message_callback=callback)
  12. channel.start_consuming()
  13. print(‘To exit press CTRL+C’)
  14. connection.close()

* где:

  • строки 6-8: задаем параметры для подключения к нашему серверу сообщений. Обратите внимание, что мы используем логин и пароль для созданного ранее пользователя test_user . Также мы подключаемся к созданному хосту test_host .
  • строки 10-11: подключаемся к серверу, подключаемся к очереди с названием hello .
  • строки 13-14: функция для отображения содержимого очереди.
  • строка 16: параметры чтения очереди. Обратите внимание, что мы передаем данные очереди в нашу функцию callback , которую определили в строке 13,
  • строка 18: запускаем процесс чтения данных в очереди.

Разрешаем запуск скрипта:

chmod +x /scripts/rabbit_test_recieve.py

И запустим его:

/scripts/rabbit_test_recieve.py

На экране должно появиться наше сообщение. Чтобы прервать выполнение скрипта, нажимаем CTRL+C (на экране появится некрасивый вывод, но это не страшно в рамках нашего теста).

Снова смотрим очередь:

rabbitmqadmin -u test_user -p test list queues

Она должна стать пустой.

RabbitMQ в Docker

Брокер может быть запущен как контейнер 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

* В данном примере мы:

  • запустим rabbitmq на порту 5672 .
  • создадим пользователя root с паролем 12345678 .
  • будем работать в виртуальном хосте vdata .

Для запуска контейнера вводим команду:

docker-compose up -d

EnglishRussianUkrainian