首页 / Go 平台(cloud-go) / 设备接入:dgsvr + gpscodecsvr

接入链路总览

GPS Tracker / 车载设备
        │ MQTT / TCP
        ▼
   EMQX ──► dgsvr(认证、注册、在线状态)
                │ 内部消息
                ▼
           gpscodecsvr(私有 Protobuf ↔ 标准物模型 JSON)
                │ NATS
                ▼
           device.up.thing.* / application.device.*(Java 订阅)

dgsvr 设备网关

dgsvr 负责设备接入认证与链路管理,逻辑位于 internal/logic/deviceauth

能力实现说明
访问认证accessAuthLogic.go设备访问凭证校验(上线鉴权)
登录认证loginAuthLogic.go设备登录认证(设备密钥/证书)
设备注册deviceRegisterLogic.go新设备注册入网
消息订阅/发布MQTT 客户端管理设备消息上下行路由、订阅关系管理
在线状态Redis + 状态通知上线/下线推送 device.up.status.connected/disconnected
设备"已连接"与"已认证"是两个状态:连接由 EMQX 建立,认证通过后才允许收发业务消息;认证失败设备不进入业务链路。

gpscodecsvr 编解码

gpscodecsvr 位于设备接入层(dgsvr)与设备管理层(dmsvr)之间,专门负责 GPS Tracker 私有 Protobuf 载荷与平台标准物模型 JSON 的互转:

  • 上行:私有协议坐标/状态 → 标准物模型属性(供 geosvr、Java 订阅消费)
  • 下行:标准指令 → 私有协议载荷(下发到设备)
  • 实现位于 internal/codec/gpsinternal/protocol/gpsgps/tracker.proto
新增设备型号/协议时优先扩展编解码层,保持上层物模型契约稳定;解码失败必须有日志与监控,避免静默丢点。

排查要点

  • 设备不上线:先看 EMQX 连接 → dgsvr 认证日志 → 上线事件(device.up.status.connected)是否发出。
  • 数据未入库:确认 gpscodecsvr 是否解码成功、NATS 主题是否正确、geosvr 是否消费。
  • 指令下发失败:检查 dgsvr MQTT 客户端状态与 device.down.* 主题、设备是否在线。