RabbitMQ - что это такое и как его установить?

RabbitMQ - что это такое и как его установить?

RabbitMQ - это система очереди сообщений. Очередь сообщений в свою очередь предоставляет способ асинхронного взаимодействия между различными компонентами системы. RabbitMQ реализована на протоколе AMQP.

RabbitMQ - это система очереди сообщений. Очередь сообщений в свою очередь предоставляет способ асинхронного взаимодействия между различными компонентами системы. RabbitMQ реализована на протоколе AMQP.

AMQP - это открытый протокол, который определяет, как система должна обмениваться сообщениями. Он устанавливает правила, которыми должны следовать системы, которые собираются взаимодействовать друг с другом. В дополнении к описанию способа взаимодействия между системами и брокером, он также стандартизирует команды и сообщения, которыми обмениваются системы. Так как AMQP написано на открытом коде, его сообщество довольно большое и на нём реаливаны брокеры и клиентские части на многих языках программирования.

Ниже я приведу концепции AMQP:

  • Брокер сообщений - это часть приложения, которое получает сообщений от одного приложеня и доставляет другому.
  • Виртуальный хост - это часть брокера. Является способом разделения приложений, которые используют один RabbitMQ. Например, вы можете разделить по виртуальным хостам dev и staging окружение, чтобы они были изолированными друг от друга. Пользователи, обмен сообщениями, очереди - всё это изолировано на виртуальном хосте. Пользователь, подсоединённый к определённому хосту, не может видеть данные в другом хосте.
  • Соединение - это физическое соединение по протоколу TCP между приложениями и брокером. Когда клиент отсоединяется или система вылетает с ошибкой, соединение закрывается.
  • Канал - это виртуальное соединение внутри соединения. Он переиспользует существующее соединение, чтобы сэкономить на ресурсах и не заствлять системы устанавливать новое соединение. Когда происходит публикация или запрос нового сообщения, весь процесс происходит внутри существующего соединения.
  • Обмен - это применение таких правил к сообщеням, по которым они достигают места назначения. Другими словами, процесс обмена удостоверяется, что полученное сообщение приходит в конкретную очередь. В какую очередь попадает сообщение зависит от правил, определённых для этого типа сообщений. Очередь должна быть привязана как минимум к одному обмену, чтобы получать сообщения.
  • Очередь - это упорядоченный список сообщений. Очередь существует внутри брокера.
  • Связь - это виртуальное соединение между обменом и очередью внутри брокера. Она позволяет сообщениям перетекать из обмена в очередь.

RabbitMQ - это реализация AMQP на языке Erlang. Этот язык был выбран не случайно, он позволяет создавать распределённые и устойчивые приложения. Приложение может запускаться на любых операционных системах. Но в этой статье мы будем устанавливать RabbitMQ на Ubuntu.

В качестве хранения данных RabbitMQ использует Mnesia - это база данных, которая производит обработку данных как в памяти, так и на диске, тоже написана на Erlang. Mnesia хранит информацию о пользователях, обмене, очередят, связях и т.д. Индекс очереди хранит положение сообщения и информацию о том, было ли оно доставлено или нет.

Сценарии использования RabbitMQ

Очереди сообщений часто используются в микросервисной архитектуре. Но что это означает?

Микросервисная архитектура разделяет приложение на мелкие сервисы и само приложение является суммой всех микросервисов. Сервисы не соединены друг с другом напряму. Вместо этого они используют очередь сообщений. Один сервис в асинхронном режиме отправляет сообщение в очередь, а другой его получает.

Другой пример использования RabbitMQ - это события и задачи.

События, задачи, уведомления говорят приложению, что что-то произошло. Одно приложение может подписаться на события от другого и делать необходимые операции.

Например, представьте обычную социальную сеть. Если один пользователь публикует пост, то его друзья, у которых включено уведомление, должны увидеть этот пост в своей ленте. Эта операция является довольно ресурсоёмкой, поэтому имеет смысл событие о публикации поста вынести в очередь. И затем обработать его в асинхронном режиме, распределив пост между друзьями пользователя.

Установка RabbitMQ.

Для начала работы, вам понадобится пройти три этапа:

  • Установить брокер
  • Установить плагин управления брокером
  • Настроить хост и пользователя.

Установка брокера.

Процесс установки довольно простой:

  1. Обновить Ubuntu.
  2. Скачать и установить ключ репозитория.
  3. Проверить ключ в репозитории.
  4. Установить RabbitMQ.

Итак, давайте для начала обновим систему. Запустим по очереди две команды:

 

sudo apt-get update

sudo apt-get dist-upgrade

 

RabbitMQ требует несколько пакетов. Проверьте, что все они установлены:

 

sudo apt install curl, gnupg -y

sudo apt install apt-reansport-https

 

Опция -y принимает лицензионное соглашение и устанавливает дополнительные зависимости.

Проверьте название операционной системы, запустив любую из следующих команд:

cat /etc/os-release

lsb_release -a

hostnamectl

 

Теперь давайте добавим ключ:

curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor > /usr/share/keyrings/com.rabbitmq.team.gpg

sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF

deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main

deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main

deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main

deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main

EOF

sudo apt-get update -y

 

Не забываем, что RabbitMQ написан на Erlang, поэтому нам понадобится установить дополнительные зависимости:

sudo apt-get install -y erlang-base \

                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \

                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \

                        erlang-runtime-tools erlang-snmp erlang-ssl \

                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

 

Теперь пакет готов к установки, можно приступать:

 

sudo apt install -y rabbitmq-server

sudo apt install librabbitmq-dev

 

Последний пакет включает в себя клиента для взаимодействия с брокером.

 

После установки запустить rabbitMQ можно следующим образом:

 

rabbitmq-server start

 

Сервер будет запущен в фоне. Чтобы запустить брокер как сервис, используйте следующие команды:

 

sudo systemctl enable rabbitmq-server

sudo systemctl start rabbitmq-server

sudo systemctl status rabbitmq-server

 

Команда systemctl может также использоваться для управления сервисами в операционной системе.

Проверить статус rabbitMQ можно следующей командой:

 

sudo service rabbitmq-server status

 

Теперь пришла очередь установки плагина управления RabbitMQ. Он нужен, чтобы у нас был визуальный интерфейс управления очередями.

Пакет во время установки устанавливает несколько скриптов. Один из них - rabbitmq-plugins. Его задача - установки и удаление дополнительных плагинов. Используйте его, чтобы установить панель управления:

 

sudo rabbitmq-plugins enable rabbitmq_management

 

Да, это очень просто!

Теперь вы можете открыть браузер и зайти в панель управления по адресу:

http://127.0.0.1:15672

 

При открытии страницы у вас запросят логин и пароль. Но пользователей мы не создавали. Давайте сделаем это. Для этого используем команду rabbitmqctl:

 

sudo rabbitmqctl add_user cc-admin admin123

sudo rabbitmqctl set_user_tags cc-admin administrator

 

По умолчанию вам доступен гость с паролем по умолчанию. Для безопасности измените его пароль:

 

sudo rabbitmqctl change_password guest guest123

 

Теперь вы можете зайти в панель управления по логину cc-admin и паролю admin123

Но мы создали только администратора, у него нет возможности мониторить обмен или очередь или управлять виртуальными хостами. Для процесса разработки нужно создать пользователя с правами разработки.

 

sudo rabbitmqctl add_user cc-dev dev123

 

Как обсуждалось ранее, RabbitMQ всё складывает в своеобразные папки, которые изолированы друг от друга. Они называются виртуальными хостами. Нам нужно создать первый виртуальный хост, в котором и будут храниться наши очереди:

 

sudo rabbitmqctl add_vhost cc-dev-vhost

 

Эта команда создаст виртуальный хост для разработки.

Теперь нам нужно привязать пользователей к нашему хосту:

 

sudo rabbitmqctl set_permissions -p cc-dev-vhost cc-dev ".*" ".*" ".*"

 

Эта команда даёт полные права на запись, чтение и изменение.

 

Теперь можно сказать, что RabbitMQ брокер и панель управления успешно установлены, можно приступать к работе!