36 lines
2.1 KiB
Markdown
36 lines
2.1 KiB
Markdown
# 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
|
|
кэширует правила) — это естественное развитие, пока не реализовано.
|
|
|
|
## Запуск
|
|
|
|
```bash
|
|
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` и т.д.
|