Реализация rule-engine-service: RabbitMQ → правила из PostgreSQL → gRPC
Слушает telemetry.new_reading (ручной ack/nack, реквизишн только при транспортных ошибках gRPC), кэширует активные automation_rules в памяти с периодическим обновлением из PostgreSQL (JOIN с devices — резолвит внутренние ID в external_id, которым оперируют MQTT/Redis/gRPC). Условия правил (>,<,>=,<=,=,!=) оцениваются обобщённо, без привязки к конкретным типам устройств. При срабатывании вызывает device-control-service по gRPC и публикует automation.rule_triggered в RabbitMQ. Проверено сквозным тестом через docker compose на полном пайплайне: mosquitto_pub → ingest-service (ClickHouse + telemetry.new_reading) → rule-engine-service (совпадение правила) → device-control-service (gRPC → Redis desired_state + MQTT-команда) → automation.rule_triggered. Показание ниже порога проверено отдельно — правило корректно не срабатывает.
This commit is contained in:
+31
-3
@@ -147,6 +147,34 @@ services:
|
||||
- home-automation
|
||||
restart: unless-stopped
|
||||
|
||||
# Remaining app services (rule-engine-service, health-check-service,
|
||||
# esp32-emulator, laravel-app) are added here as they get implemented —
|
||||
# see services/*/README.md for the plan for each one.
|
||||
rule-engine-service:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: services/rule-engine-service/Dockerfile
|
||||
environment:
|
||||
POSTGRES_HOST: postgres
|
||||
POSTGRES_PORT: 5432
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
DEVICE_CONTROL_HOST: device-control-service
|
||||
DEVICE_CONTROL_GRPC_PORT: 50051
|
||||
RABBITMQ_HOST: rabbitmq
|
||||
RABBITMQ_PORT: 5672
|
||||
RABBITMQ_USER: ${RABBITMQ_USER}
|
||||
RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD}
|
||||
RULE_ENGINE_CACHE_REFRESH_INTERVAL: ${RULE_ENGINE_CACHE_REFRESH_INTERVAL}
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
rabbitmq:
|
||||
condition: service_healthy
|
||||
device-control-service:
|
||||
condition: service_started
|
||||
networks:
|
||||
- home-automation
|
||||
restart: unless-stopped
|
||||
|
||||
# Remaining app services (health-check-service, esp32-emulator,
|
||||
# laravel-app) are added here as they get implemented — see
|
||||
# services/*/README.md for the plan for each one.
|
||||
|
||||
Reference in New Issue
Block a user