name: rabbitmq
service_id: 93
service_display_name: RabbitMQ
service_short_name: rabbitmq
service_man: '# Инструкция по развертыванию RabbitMQ через платформу
---
## 1. Общая информация
RabbitMQ — это брокер сообщений с открытым исходным кодом, который обеспечивает надёжную
доставку сообщений между приложениями.
Позволяет надёжно передавать сообщения между сервисами и системами, интегрироваться с внешними решениями и использовать как внутренние, так и защищённые TLS-подключения.
Развёртывание полностью автоматизировано платформой.
## Доступные операции
- **create** — Создание кластера
- **modify** — Изменение параметров кластера
- **delete** — Удаление
кластера
- **suspend** — Остановка кластера
- **resume** — Запуск кластера
---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо
указать при создании ресурса RabbitMQ:
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.
*
**Количество узлов в сети:**
Количество реплик в кластере RabbitMQ. При значении больше 1 создаётся кластер с репликацией для обеспечения высокой доступности.
Пример: `1` (single node) или
`3` (кластер с репликацией)
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `2048`
* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах
(1000 mCPU = 1 vCPU). Пример: `1000`
* **Размер (gigabyte) диска для базы данных:**
Размер диска для хранения данных RabbitMQ в гигабайтах. Пример: `50`
* **Выделяет внешний IP
для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа к master-узлу. При включении создаётся Service типа LoadBalancer и настраивается VIP на порту 5672.
Пример:
`true` или `false`
* **Имя ipSpace для публикации внешнего IP master:**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
---
##
3. Модификация кластера
Операция **modify** позволяет изменить параметры существующего кластера RabbitMQ.
**Изменяемые параметры:**
* **Квота (megabyte) памяти пода** — можно увеличить
или уменьшить
* **Квота (millicore) ядра пода** — можно увеличить или уменьшить
* **Размер (gigabyte) диска для базы данных** — можно только увеличить (уменьшение не поддерживается)
* **Количество
узлов в сети** — можно только увеличить (уменьшение не поддерживается)
* **Выделяет внешний IP для доступа к master** — можно включить или выключить
* **Имя ipSpace для публикации внешнего IP
master** — можно изменить при включенном внешнем IP
**Ограничения:**
* Уменьшение размера диска не поддерживается
* Уменьшение количества реплик не поддерживается
---
##
4. Выходные параметры
После успешного развертывания ресурса RabbitMQ платформа возвращает ряд параметров в разделе "Поля состояния (сгенерированные значения)":
**clusterDomain**
Домен
кластера Kubernetes, в котором развернут RabbitMQ.
Пример: `cluster.local`
**inernalConnect**
Внутренние эндпоинты для подключения к кластеру RabbitMQ из других сервисов, развернутых
внутри той же сети.
Содержит:
* **master** — FQDN для подключения к кластеру. Пример: `rabbitmqk8s.{namespace}.svc.{clusterDomain}`
**externalConnect**
Внешние эндпоинты для подключения
к кластеру RabbitMQ извне.
Содержит объекты с полями:
* **admin** — доступ к веб-интерфейсу управления:
* `fqdn` — полное доменное имя для веб-интерфейса. Пример: `admin.{namespace}.{domain}`
*
`ip` — IP-адрес
* **master** — доступ к AMQP протоколу (если включен внешний IP):
* `fqdn` — полное доменное имя для AMQP. Пример: `write.{namespace}.{domain}`
* `ip` — IP-адрес
**monitoring**
Информация
о дашбордах мониторинга:
* **allDashboards** — URL для доступа ко всем дашбордам Grafana
Для подключения используются следующие порты:
* **5672** — AMQP протокол (внутренний и внешний
доступ, если включен внешний IP)
* **15672** — веб-интерфейс управления (доступен через Ingress по HTTPS)
**Учётные данные**
Данные для подключения к RabbitMQ доступны в разделе "Учётные
данные":
* **adminUser** — имя пользователя администратора
* **adminPass** — пароль администратора
---
## 5. Примеры подключения через консоль (rabbitmqadmin)
### Работа
с очередями через rabbitmqadmin
Для работы с RabbitMQ через консоль используется утилита `rabbitmqadmin`. Установите её или используйте образ с предустановленной утилитой.
Задайте переменные
окружения с учётными данными:
```bash
export RABBITMQ_USERNAME=
export RABBITMQ_PASSWORD=
export RABBIT_HOST=
```
Где:
* ``
и `` — учётные данные из раздела "Учётные данные"
* `` — адрес для подключения:
* Для внешнего подключения: `externalConnect.admin.fqdn` или `externalConnect.master.fqdn`
**Создание
очереди:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
declare queue name=healthcheck durable=false
```
**Листинг
очередей:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
list queues
```
**Отправка сообщения:**
```bash
rabbitmqadmin
\
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
publish exchange=amq.default routing_key=healthcheck payload="ping-$(date +%s)"
```
**Чтение
сообщения:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
get queue=healthcheck ackmode=ack_requeue_false
```
---
##
6. Дополнительная информация
Для подключения к кластеру RabbitMQ используйте полученные эндпоинты из раздела "Поля состояния (сгенерированные значения)" и учётные данные из раздела "Учётные данные".
Веб-интерфейс
управления доступен по адресу, указанному в параметре `externalConnect.admin.fqdn` через HTTPS.
Для внутреннего подключения используйте адрес из `inernalConnect.master` на порту 5672.
---'
lifecycle:
suspendOnDestroyDefault: true
adoptExistingOnCreateDefault: false
operations:
- svcOperationId: 38
operation: create
kind: instance
action: create
- svcOperationId: 39
operation: delete
kind: instance
action: delete
- svcOperationId: 106
operation: modify
kind: instance
action: modify
- svcOperationId: 410
operation: reconcile
kind: action
action: reconcile
- svcOperationId: 117
operation: resume
kind: instance
action: resume
- svcOperationId: 116
operation: suspend
kind: instance
action: suspend
stateOut: {}
cfsParams:
- svcOperationCfsParamId: 1097
svcOperationCfsParam: startupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: false
dataDescriptor:
resourceRealm:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- iot-naeel
- k8s-3-sandbox-nubes-ru
- k8s-4-sandbox-nubes-ru
- naeel-test-3
- svcOperationCfsParamId: 1098
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
cpu:
dataType: integer > 0
defaultValue: '1000'
isRequired: true
isModifiable: false
memory:
dataType: integer > 0
defaultValue: '1024'
isRequired: true
isModifiable: false
replicas:
dataType: integer > 0
defaultValue: '1'
isRequired: true
isModifiable: false
valueList:
- '1'
- '3'
- '5'
- '7'
disk:
dataType: integer > 0
defaultValue: '5'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1099
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
masterIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
masterAccessList:
dataType: json
defaultValue: '[]'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1100
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
disk:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
cpu:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
memory:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
replicas:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '1'
- '3'
- '5'
- '7'
- svcOperationCfsParamId: 1101
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
masterIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
masterAccessList:
dataType: json
defaultValue: ''
isRequired: true
isModifiable: false
cfsParamsByOp:
38:
- 1097
- 1098
- 1099
39: []
106:
- 1100
- 1101
410: []
117: []
116: []
stateParams:
startupConfiguration: '{"resourceRealm": ""}'
clusterConfiguration: '{"cpu": 1000, "memory": 1024, "replicas": 1, "disk": 5}'
accessConfiguration: '{"masterIpSpace": "", "masterAccessList": "[]"}'