Несколько заметок по работе с 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

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

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