2.1 KiB
ingest-service (Go)
Статус: реализован (MVP).
Зона ответственности:
- Подписка на MQTT-топики
devices/{device_id}/telemetry. - Валидация/парсинг payload (device_id, sensor_type, value, timestamp).
- Батч-запись сырых показаний в таблицу ClickHouse
telemetry. - Публикация события «новое показание» в RabbitMQ для rule-engine-service.
Не входит в зону ответственности: интерпретация того, что означает показание датчика (пороги, действия) — это задача rule-engine-service. Этот сервис только принимает и сохраняет данные.
Про zone_id: payload телеметрии несёт zone_id напрямую (публикующее
устройство/эмулятор само знает свою зону), а не ingest-service ищет его в
PostgreSQL. Это удерживает зависимости ingest-service в рамках
MQTT/ClickHouse/RabbitMQ, как и на диаграмме архитектуры в корневом README.
Для реального парка устройств, которые не будут знать свою зону,
понадобится lookup через реестр устройств (с кэшированием, как rule-engine
кэширует правила) — это естественное развитие, пока не реализовано.
Запуск
cd services/ingest-service
go test ./...
go build ./cmd/ingest-service
Конфигурация читается из переменных окружения (см. секцию ingest-service в
корневом .env.example). Через docker compose up ingest-service сервис
обращается напрямую к контейнерам mosquitto/clickhouse/rabbitmq; для
локального запуска через go run выставь MQTT_HOST=localhost,
CLICKHOUSE_HOST=localhost и т.д.