Appearance
Centrifugo
Назначение
Сервер real-time доставки сообщений WebSocket-клиентам. Интегрирован с NATS через брокер. Предоставляет каналы для push-уведомлений о событиях платформы: задачи, исполнители, пайплайны.
Архитектура взаимодействия
Клиент (браузер) → Gateway (JWT token) → Centrifugo (WebSocket, порт 8100)
↑
NATS Bridge
↑
NATS
↑
Бэкенд-сервисы (pub events)- Клиент аутентифицируется через Gateway → получает JWT token (
GET /api/v1/centrifugo/token) - Клиент подключается к Centrifugo через WebSocket (порт 8100)
- Бэкенд-сервисы публикуют события в NATS
- NATS Bridge подписывается на NATS subjects → оборачивает в EventEnvelope → публикует в Centrifugo HTTP API
- Centrifugo доставляет события подключённым клиентам
Порты
| Порт | Назначение |
|---|---|
| 8100 | WebSocket клиентские подключения |
| 8101 | Внутренний HTTP API |
Пространства каналов (Namespaces)
| Namespace | Описание |
|---|---|
user | Пользовательские события |
job | События задач |
executor | События исполнителей |
pipeline | События пайплайнов |
Маршрутизация каналов
- Если событие содержит
user_id→ персональный канал:<namespace>:user:<user_id> - Если
user_idотсутствует → broadcast:<namespace>:broadcast
Маппинг NATS → Centrifugo
| NATS Subject | Namespace | Канал |
|---|---|---|
job.created | job | job:user:<id> / job:broadcast |
job.changed | job | job:user:<id> / job:broadcast |
executor.status | executor | executor:user:<id> / executor:broadcast |
runner.change | executor | executor:user:<id> / executor:broadcast |
pipeline.test.> | pipeline | pipeline: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_KEY | HMAC секрет для JWT (должен совпадать с JWT_SECRET Gateway) | — |
CENTRIFUGO_HTTP_API_KEY | API ключ для HTTP API | — |
CENTRIFUGO_BROKER_NATS_URL | URL NATS-брокера | nats://localhost:4222 |
CENTRIFUGO_PORT | Порт WebSocket | 8100 |
CENTRIFUGO_API_PORT | Порт HTTP API | 8101 |
CENTRIFUGO_TOKEN_TTL | TTL connection-токена | 5m |
CENTRIFUGO_NATS_PREFIX | Префикс NATS subjects | centrifugo |
Обязательные переменные: MESSAGING_URL, CENTRIFUGO_API_KEY, CENTRIFUGO_TOKEN_HMAC_SECRET_KEY.