Добавлен gRPC-контракт proto/device_control (TurnOn/TurnOff/SetLevel), общий Go-модуль proto/ для переиспользования сгенерированного кода. device-control-service принимает команды по gRPC, обновляет desired_state в Redis и публикует их в MQTT; слушает devices/+/telemetry и devices/+/ack для отметки живости устройства и обновления reported_state; горутина health-check переводит устройство в offline по таймауту и публикует событие в RabbitMQ (device.status_changed) для будущего notification-service. Проверено сквозным тестом через docker compose: grpcurl TurnOn/SetLevel меняет desired_state и уходит в MQTT, mosquitto_pub с ack обновляет reported_state и статус, health-check автоматически переводит устройство в offline по истечении таймаута.
16 lines
643 B
Docker
16 lines
643 B
Docker
# Build context is the repo root (not this directory) — device-control-service
|
|
# depends on the sibling proto/ Go module via a relative `replace` directive.
|
|
FROM golang:1.25-alpine AS build
|
|
WORKDIR /src
|
|
COPY proto/ ./proto/
|
|
COPY services/device-control-service/ ./services/device-control-service/
|
|
WORKDIR /src/services/device-control-service
|
|
RUN go mod download
|
|
RUN CGO_ENABLED=0 go build -o /out/device-control-service ./cmd/device-control-service
|
|
|
|
FROM alpine:3.20
|
|
RUN adduser -D -u 10001 app
|
|
COPY --from=build /out/device-control-service /usr/local/bin/device-control-service
|
|
USER app
|
|
ENTRYPOINT ["/usr/local/bin/device-control-service"]
|