Skip to content

Centrifugo

Назначение

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

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

Клиент (браузер) → Gateway (JWT token) → Centrifugo (WebSocket, порт 8100)
Внешний Concierge UI → concierge (socket-token) → Centrifugo

                                    NATS Bridge  |  Concierge HTTP API

                                             NATS

                                   Бэкенд-сервисы (pub events)
  1. Основной клиент аутентифицируется через Gateway → получает JWT token (GET /api/v1/centrifugo/token)
  2. Внешний Concierge UI берёт токен у concierge (GET /api/v1/auth/socket-token)
  3. Клиент подключается к Centrifugo через WebSocket (порт 8100)
  4. Бэкенд-сервисы публикуют события в NATS; NATS Bridge оборачивает их в EventEnvelope и шлёт в Centrifugo HTTP API
  5. Concierge публикует в Centrifugo напрямую (каналы concierge:*), минуя NATS Bridge
  6. Centrifugo доставляет события подключённым клиентам

Порты

ПортНазначение
8100WebSocket и HTTP API (один http_server)

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

NamespaceОписание
userПользовательские события (inbox)
jobСобытия задач (jobs)
executorСобытия исполнителей
pipelineСобытия пайплайнов
aiСтриминг AI-чата и tool-call'ы
mcpMCP session/tool events
tasksИзменения Task Tracker (tasks:broadcast)
conciergeВнешний портал: concierge:user:{id}, concierge:admin

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

  • Если событие содержит 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
tasks.>taskstasks:broadcast
ai.chat.*aiai:user:<id> / ai:broadcast
mcp.*mcpmcp:user:<id> / mcp:broadcast
inbox.createduseruser:user:<id>

События concierge в эту таблицу не входят: сервис concierge пишет в Centrifugo сам (см. concierge.md).

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Порт WebSocket и HTTP API8100
CENTRIFUGO_TOKEN_TTLTTL connection-токена5m
CENTRIFUGO_NATS_PREFIXПрефикс NATS subjectscentrifugo

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