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: 117 operation: resume kind: instance action: resume - svcOperationId: 116 operation: suspend kind: instance action: suspend stateOut: {} cfsParams: - svcOperationCfsParamId: 116 svcOperationCfsParam: resourceCPU dataType: integer > 0 isRequired: true defaultValue: '1000' isModifiable: true - svcOperationCfsParamId: 117 svcOperationCfsParam: resourceMemory dataType: integer > 0 isRequired: true defaultValue: '1124' isModifiable: true - svcOperationCfsParamId: 118 svcOperationCfsParam: resourceDisk dataType: integer > 0 isRequired: true defaultValue: '30' isModifiable: true - svcOperationCfsParamId: 119 svcOperationCfsParam: resourceRealm dataType: string isRequired: true defaultValue: k8s-4-ext-nubes-ru isModifiable: false valueList: - k8s-4-ext-nubes-ru - svcOperationCfsParamId: 224 svcOperationCfsParam: resourceInstances dataType: integer > 0 isRequired: true defaultValue: '1' isModifiable: true - svcOperationCfsParamId: 225 svcOperationCfsParam: needExternalAddressMaster dataType: boolean isRequired: true defaultValue: 'false' isModifiable: true valueList: - 'false' - 'true' - svcOperationCfsParamId: 543 svcOperationCfsParam: ipSpaceNameMaster dataType: string isRequired: false defaultValue: '' isModifiable: true - svcOperationCfsParamId: 304 svcOperationCfsParam: resourceCPU dataType: integer > 0 isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 305 svcOperationCfsParam: resourceMemory dataType: integer > 0 isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 306 svcOperationCfsParam: resourceDisk dataType: integer > 0 isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 307 svcOperationCfsParam: resourceInstances dataType: integer > 0 isRequired: true defaultValue: '' isModifiable: true - svcOperationCfsParamId: 308 svcOperationCfsParam: needExternalAddressMaster dataType: boolean isRequired: true defaultValue: '' isModifiable: true valueList: - 'false' - 'true' - svcOperationCfsParamId: 545 svcOperationCfsParam: ipSpaceNameMaster dataType: string isRequired: false defaultValue: '' isModifiable: true cfsParamsByOp: 38: - 116 - 117 - 118 - 119 - 224 - 225 - 543 39: [] 106: - 304 - 305 - 306 - 307 - 308 - 545 117: [] 116: [] stateParams: resourceCPU: '1000' resourceMemory: '1124' resourceDisk: '30' resourceRealm: k8s-4-ext-nubes-ru resourceInstances: '1' needExternalAddressMaster: 'false' ipSpaceNameMaster: ''