Запуск RabbitMQ в Docker
RabbitMQ — это программное обеспечение брокера сообщений с открытым исходным кодом (иногда называемое промежуточным программным обеспечением, ориентированным на сообщения), которое реализует протокол расширенной очереди сообщений (AMQP). Сервер RabbitMQ написан на языке программирования Erlang и построен на платформе Open Telecom Platform для кластеризации и аварийного переключения. Клиентские библиотеки для взаимодействия с брокером доступны для всех основных языков программирования.
Сегодня мы поговорим о том, как быстро запустить экземпляр RabbitMQ на Docker. Мы рассмотрим два способа запуска образа RabbitMQ Docker в контейнере с помощью команды docker run
, и с помощью Docker Compose
. Знакомство с этими двумя подходами должно значительно ускорить ваше изучение RabbitMQ..
Использование образа RabbitMQ Docker
Реестр контейнеров RabbitMQ ( ссылка ) включает множество образов для разных платформ. В этой статье мы будем использовать образ RabbitMQ с тегом 3-management
, который представляет собой образ Docker с установленным и включенным по умолчанию подключаемым модулем управления RabbitMQ.
Предполагая, что рабочий стол Docker установлен, мы используем командуdocker pull rabbitmq:3-management
чтобы получить образ RabbitMQ Docker из DockerHub. После того, как образ Docker загружен и сохранен локально, мы можем запустить контейнер RabbitMQ, используя следующую команду.
docker run --restart=always -d --hostname my-rabbit --name some-rabbit -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 8080:15672 rabbitmq:3-management
или если достаточно проброса порта брокера и web интерфейса.
docker run --restart=always -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 8080:15672 rabbitmq:3-management
Список порты используемых RabbitMQ
4369/tcp,
5671/tcp,
5672/tcp,
15671/tcp,
15672/tcp,
15691-15692/tcp,
25672/tcp
В приведенной выше команде порт 5672 используется для клиентских подключений RabbitMQ, а порт 15672 — для веб-сайта управления RabbitMQ. Выполнение этой команды может занять минуту. После этого мы можем открыть окно браузера и использовать URL-адрес http://localhost:15672 для посещения веб-сайта управления RabbitMQ. На следующем снимке экрана показана страница входа на веб-сайт.
Мы можем использовать имя пользователя и пароль по умолчанию guest:guest
для входа на веб-сайт. На следующем снимке экрана показана домашняя страница веб-сайта управления.
После входа в систему мы можем исследовать конфигурации RabbitMQ, соединения, каналы, обмены и очереди. Мы также можем настроить новые учетные записи для входа с различными разрешениями.
Очень просто! Теперь у нас есть экземпляр сервера RabbitMQ. Мы можем оставить все нетронутым на веб-сайте управления и начать изучать RabbitMQ, следуя его официальным руководствам .
Настроек RabbitMQ по умолчанию достаточно для учебных целей и некоторых сценариев разработки, но не для большинства реальных проектов. На самом деле нам обычно нужно настроить предопределенные обмены и очереди, а также набор пользователей с их разрешениями. Более того, когда мы обновляем экземпляр RabbitMQ, хорошей идеей будет экспортировать настройки в виде файла и сохранить файл настроек в системе контроля версий.
Далее в этом разделе я сначала покажу вам, как экспортировать настройки RabbitMQ., а затем я покажу вам, как загрузить настройки в контейнер Docker с помощью Docker Compose.
Подготавливаем файл настроек
definitions.json
{
"rabbit_version": "3.8.3",
"rabbitmq_version": "3.8.3",
"users": [
{
"name": "user1",
"password_hash": "sOD2Ib17c/ZW9PiMDKZXvoHlBcWirR0lF/+vTOTOy/t7QSuL",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": ""
},
{
"name": "admin",
"password_hash": "ZdETL0pgo3iUOn/shv9QhBl3T98wMsLu2/5GfIL2fjbpPgMM",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "administrator"
},
{
"name": "user2",
"password_hash": "xynNraNzjBRvH9LkLRtnvHZW91dRw3EbDUMdxAVkxj9wSBEC",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": ""
}
],
"vhosts": [{ "name": "/" }],
"permissions": [
{
"user": "admin",
"vhost": "/",
"configure": ".*",
"write": ".*",
"read": ".*"
},
{
"user": "user1",
"vhost": "/",
"configure": "",
"write": "logs*",
"read": ".*"
},
{
"user": "user2",
"vhost": "/",
"configure": "",
"write": "",
"read": "mytest"
}
],
"topic_permissions": [
{
"user": "user1",
"vhost": "/",
"exchange": "logs",
"write": ".*",
"read": ".*"
},
{
"user": "user2",
"vhost": "/",
"exchange": "logs",
"write": "order.*",
"read": "order.*"
},
{
"user": "admin",
"vhost": "/",
"exchange": "",
"write": ".*",
"read": ".*"
}
],
"parameters": [],
"global_parameters": [
{ "name": "cluster_name", "value": "rabbit@my-rabbit" },
{
"name": "internal_cluster_id",
"value": "rabbitmq-cluster-id-fBlXlF8ZzdFhhNCMG7vY-A"
}
],
"policies": [],
"queues": [
{
"name": "myRabbitMQ",
"vhost": "/",
"durable": true,
"auto_delete": false,
"arguments": { "x-queue-type": "classic" }
}
],
"exchanges": [
{
"name": "logs",
"vhost": "/",
"type": "topic",
"durable": true,
"auto_delete": false,
"internal": false,
"arguments": {}
}
],
"bindings": [
{
"source": "logs",
"vhost": "/",
"destination": "mytest",
"destination_type": "queue",
"routing_key": "order.created",
"arguments": {}
}
]
}
Загрузка/импорт определений брокера с помощью Docker Compose
Несмотря на то, что на StackOverflow есть много ответов, связанных с этой темой, большинство из них устарели. Здесь мы будем использовать последние версии всех зависимостей.
Мы создаем docker-compose.yml
файл с его содержимым следующим образом.
version: '3.8'
services:
rabbitmq:
image: rabbitmq:3-management
hostname: my-rabbit
volumes:
- ./rabbitmq/etc/definitions.json:/etc/rabbitmq/definitions.json
- ./rabbitmq/etc/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
- ./rabbitmq/data:/var/lib/rabbitmq/mnesia/rabbit@my-rabbit
- ./rabbitmq/logs:/var/log/rabbitmq/log
ports:
- 5672:5672
- 15672:15672
В docker-compose.yml
файле требуется строка 8, если мы хотим, чтобы RabbitMQ загружал наши настроенные определения. Строка 8 монтирует наш definitions.json
файл в контейнер Docker.
Строки с 9 по 11 являются необязательными томами, но часто используются. Строки 10 и 11 — это файлы базы данных и журнала сервера RabbitMQ. Мы можем сохранить их на нашем локальном диске на случай, если мы захотим восстановить историю сообщений. Обратите внимание, что эти две локальные папки нужно игнорировать в Git.
Строка 9 относится к rabbitmq.conf
файлу. Файл конфигурации rabbitmq.conf
позволяет настроить сервер RabbitMQ и плагины. Начиная с RabbitMQ 3.7.0 файл конфигурации имеет sysctl
формат . В git-репозитории RabbitMQ есть пример rabbitmq.conf
файла , который включает в себя большинство элементов конфигурации, которые мы, возможно, захотим установить, а также документацию по этим настройкам.
В свою демонстрацию я включил минимальный rabbitmq.conf
файл, который не является обязательным. В следующем фрагменте кода показано содержимое и формат этого rabbitmq.conf
файла.
loopback_users.guest = false
listeners.tcp.default = 5672
management.listener.port = 15672
management.listener.ssl = false
management.load_definitions = /etc/rabbitmq/definitions.json
Хорошо. С помощью docker-compose.yml
файла мы можем легко запустить сервер RabbitMQ с нашими настроенными определениями и конфигурациями. Команда, которую мы будем использовать, это docker-compose up
. Быстрый способ проверить пользовательские определения — войти на веб-сайт управления в качестве пользователя-администратора ( admin:P@ssw0rd
). Мы должны увидеть, что гостевой пользователь больше не существует на сервере RabbitMQ.
С помощью настраиваемых определений мы можем запускать экземпляры RabbitMQ с одинаковым поведением в разных средах и платформах.
RabbitMQ, и Docker — отличные инструменты для нашей разработки. Я надеюсь, что эта статья ускорит ваше изучение RabbitMQ.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.