Skip to content

Архитектура шины событий и асинхронный обмен сообщениями ​

Шина событий (pkg/eventbus/eventbus.go) — высокопроизводительный асинхронный брокер сообщений RUSEON Core. Она обеспечивает слабую связанность между ядром обработки видеопотоков и внешними интеграциями (Webhooks, MQTT).


1. FNV-1a хеширование и сохранение порядка событий ​

Для сохранения хронологического порядка событий по каждой камере (online, offline, segment_ready):

  • События распределяются по пулу воркеров (по умолчанию 4 воркера) через FNV-1a хеширование по полю camera_id.
  • Все события конкретной камеры обрабатываются строго последовательно в канале одного воркера (буфер на 1 000 событий).

2. Защита Circuit Breaker (30 секунд блокировки сбойных URL) ​

Для защиты пула воркеров от зависания при медленных или недоступных HTTP-серверах:

  • Запрос к вебхуку выполняется с таймаутом 3 секунды.
  • При сбое (ошибка сети или HTTP 5xx) для адреса URL включается Circuit Breaker на 30 секунд, предотвращая повторные запросы.
  • По истечении 30 секунд следующее событие выполняет контрольную отправку; при успехе Circuit Breaker сбрасывается.

3. Неблокирующий сброс и метрики ​

При полном заполнении очереди воркера (1 000 событий):

  • Новые события отбрасываются неблокирующим образом (select ... default).
  • Инкрементируется счётчик Prometheus ruseon_eventbus_drops_total.
  • Захват видеопотоков и живой просмотр не испытывают задержек.

Связанная документация ​

Released under the MIT License.