Skip to content

Centrifugo

Назначение

Сервер real-time доставки сообщений WebSocket-клиентам. Интегрирован с NATS через брокер. Предоставляет каналы для push-уведомлений о событиях платформы: задачи, исполнители, пайплайны.

Архитектура взаимодействия

Клиент (браузер) → Gateway (JWT token) → Centrifugo (WebSocket, порт 8100)

                                          NATS Bridge

                                             NATS

                                   Бэкенд-сервисы (pub events)
  1. Клиент аутентифицируется через Gateway → получает JWT token (GET /api/v1/centrifugo/token)
  2. Клиент подключается к Centrifugo через WebSocket (порт 8100)
  3. Бэкенд-сервисы публикуют события в NATS
  4. NATS Bridge подписывается на NATS subjects → оборачивает в EventEnvelope → публикует в Centrifugo HTTP API
  5. Centrifugo доставляет события подключённым клиентам

Порты

ПортНазначение
8100WebSocket клиентские подключения
8101Внутренний HTTP API

Пространства каналов (Namespaces)

NamespaceОписание
userПользовательские события
jobСобытия задач
executorСобытия исполнителей
pipelineСобытия пайплайнов

Маршрутизация каналов

  • Если событие содержит user_id → персональный канал: <namespace>:user:<user_id>
  • Если user_id отсутствует → broadcast: <namespace>:broadcast

Маппинг NATS → Centrifugo

NATS SubjectNamespaceКанал
job.createdjobjob:user:<id> / job:broadcast
job.changedjobjob:user:<id> / job:broadcast
executor.statusexecutorexecutor:user:<id> / executor:broadcast
runner.changeexecutorexecutor:user:<id> / executor:broadcast
pipeline.test.>pipelinepipeline:user:<id> / pipeline:broadcast

EventEnvelope (формат)

json
{
  "id": "<UUID v4>",
  "type": "<NATS subject>",
  "data": { ... },
  "timestamp": "<RFC 3339 UTC>"
}

Конфигурация

Файл: centrifugo/config.json

ПеременнаяОписаниеПо умолчанию
CENTRIFUGO_CLIENT_TOKEN_HMAC_SECRET_KEYHMAC секрет для JWT (должен совпадать с JWT_SECRET Gateway)
CENTRIFUGO_HTTP_API_KEYAPI ключ для HTTP API
CENTRIFUGO_BROKER_NATS_URLURL NATS-брокераnats://localhost:4222
CENTRIFUGO_PORTПорт WebSocket8100
CENTRIFUGO_API_PORTПорт HTTP API8101
CENTRIFUGO_TOKEN_TTLTTL connection-токена5m
CENTRIFUGO_NATS_PREFIXПрефикс NATS subjectscentrifugo

Обязательные переменные: MESSAGING_URL, CENTRIFUGO_API_KEY, CENTRIFUGO_TOKEN_HMAC_SECRET_KEY.