Несколько заметок по работе с RabbitMQ

Оцените статью

Когда для проекта мне понадобилось докеризовать rabbitmq, то я подумал, что ничего проще и быть не может и сейчас мы все это на изях сделаем. Но, как обычно, все оказалось немного сложнее в реальной жизни. Так-как я знатно походил по граблям, то пожалуй стоит немного задокументировать, где эти грабли аккуратно разложены. 

Запуск RabbitMQ в Docker

Пример описания сервиса

Помимо рекомендованных /var/lib/rabbitmq/ и /var/log/rabbitmq/ я бы посоветовал еще вынести во внешние тома /etc/rabbitmq и обязательно прописывать hostname или в противном случае база данных узла кролика будет инициализироваться с рандомным ID (на baremetal я такого не ловил, но вот с контейнерами получилось очень интересно).

version: "3.9"
services:
    rabbitmq:
      image: rabbitmq:3-management-alpine
      container_name: rabbitmq
      hostname: rabbitmq
      ports:
          - 5672:5672
          - 15672:15672
      volumes:
          - ./rabbitmq/data/:/var/lib/rabbitmq/
          - ./rabbitmq/log/:/var/log/rabbitmq
          - ./rabbitmq/etc/:/etc/rabbitmq

Файлы в /etc/

conf.d/10-defaults.conf  

loopback_users.guest = false
log.console = true

enabled_plugins  

[rabbitmq_management,rabbitmq_prometheus]

rabbitmq.conf  

auth_mechanisms.1 = PLAIN
auth_mechanisms.2 = AMQPLAIN
loopback_users.guest = false
listeners.tcp.default = 5672
default_pass = admin
default_user = admin
hipe_compile = false
#management.listener.port = 15672
#management.listener.ssl = false
management.tcp.port = 15672
management.load_definitions = /etc/rabbitmq/definitions.json

definitions.json  

{
  "users": [
   {
     "name": "admin",
     "password": "admin",
     "tags": "administrator"
   }
 ],
 "vhosts": [
   {
     "name": "/"
   }
 ],
 "policies": [
   {
     "vhost": "/",
     "name": "ha",
     "pattern": "",
     "apply-to": "all",
     "definition": {
       "ha-mode": "all",
       "ha-sync-batch-size": 256,
       "ha-sync-mode": "automatic"
     },
     "priority": 0
   }
 ],
 "permissions": [
   {
     "user": "admin",
     "vhost": "/",
     "configure": ".*",
     "write": ".*",
     "read": ".*"
   }
 ],
 "queues": [
   {
     "name": "job-import.triggered.queue",
     "vhost": "/",
     "durable": true,
     "auto_delete": false,
     "arguments": {}
   }
 ],
 "exchanges": [
   {
     "name": "lob-proj-dx",
     "vhost": "/",
     "type": "direct",
     "durable": true,
     "auto_delete": false,
     "internal": false,
     "arguments": {}
   }
 ],
 "bindings": [
   {
     "source": "lob-proj-dx",
     "vhost": "/",
     "destination": "job-import.triggered.queue",
     "destination_type": "queue",
     "routing_key": "job-import.event.triggered",
     "arguments": {}
   }
 ]
}

Теперь данные сохраняются локально в не зависимости от операций с контейнерами Rabbitmq.

Доступы

Доступ к web-интерфейсу: http://127.0.0.1:15672

Логин-пароль: admin/admin

Примечание

Обязательно указываем hostmane в docker-compose.yml или в противном случае база данных rabbitmq будет пересоздаваться заново.

Шпаргалка по работе в консоли RabbitMQ

Кластер и очереди

Проверка статуса кластера

# rabbitmqctl cluster_status

Авторизоваться от имени другого пользователя

# rabbitmqctl authenticate_user USER PASSWORD

Список всех очередей на всех виртуальных хостах

# for i in $(rabbitmqctl list_vhosts); do echo vhost: $i && rabbitmqctl list_queues -p $i; done

Смена типа узла с disk на ram

# rabbitmqctl change_cluster_node_type ram

Установка плагинов

# rabbitmq-plugins enable amqp_client rabbitmq_consistent_hash_exchange

Похожие записи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно…

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS