Интеграция с MQTT и публикация телеметрии
В RUSEON Core встроен высокопроизводительный паблишер MQTT 3.1.1 / 5.0 (internal/events/mqtt.go), предназначенный для интеграции с IoT-платформами, SCADA, системами умного города и промышленной автоматизацией.
Для защиты видеопайплайна от задержек сети паблишер использует Lock-Free кольцевой буфер с неблокирующей очередью сообщений.
1. Иерархия топиков и формат сообщений
RUSEON Core публикует структурированные JSON-сообщения в стандартизированное дерево топиков:
| Шаблон топика | Событие | Пример JSON-сообщения |
|---|---|---|
ruseon/cameras/{id}/status | Подключение / обрыв камеры | {"status":"online","fps":25.0,"bitrate_kbps":4096,"timestamp":1786802400} |
ruseon/cameras/{id}/events | Детекция движения / пересечение линии | {"event_type":"motion_detected","zone":"gate_1","score":0.88} |
ruseon/cameras/{id}/metadata | AI-детекции в реальном времени | {"pts":1786802400120000,"detections":[{"class":"car","confidence":0.96}]} |
ruseon/system/probes | Регулярная проверка здоровья | {"storage_free_percent":82.4,"active_streams":48,"goroutines":112} |
2. Конфигурация в config.yaml
yaml
mqtt:
enabled: true
broker: "tcp://broker.emqx.io:1883"
client_id: "ruseon_server_prod_01"
topic_prefix: "ruseon"
# Учётные данные
username: "ruseon_publisher"
password: "secure_password_here"
# Уровень сервиса (QoS: 0, 1 или 2)
qos: 1
retain_status: true
# Ёмкость буфера для изоляции от сетевых задержек
queue_capacity: 5000
# Параметры шифрования TLS
tls:
enabled: false
ca_file: "/etc/ruseon/ca.crt"
cert_file: "/etc/ruseon/client.crt"
key_file: "/etc/ruseon/client.key"3. Архитектура Lock-Free буфера
Модуль internal/buffer/lockfree.go обеспечивает:
- Неблокирующее добавление: Публикация событий выполняется через атомарные CAS-операции.
- Отсутствие блокировок: Горутины видеостриминга никогда не блокируются на мьютексах при отправке MQTT-событий.
- Защита от переполнения: При обрыве связи с брокером буфер плавно перезаписывает старые сообщения, исключая утечки памяти.