① MQTT 消息接入
┌──────────────────────────┐
│ 大疆无人机/机场设备 │
│ 发布 topic: │
│ thing/product/SN123/osd │
└──────────┬───────────────┘
│ MQTT协议
▼
② MqttPahoMessageDrivenChannelAdapter
(MqttConfiguration.java:61)
输出通道 → "inbound" (ExecutorChannel)
│
▼
③ InboundMessageRouter.determineTargetChannels()
(InboundMessageRouter.java:45)
@Router(inputChannel = "inbound")
│
│ 正则匹配 topic → CloudApiTopicEnum.OSD
│ beanName = "inboundOsd"
│
│ SpringBeanUtils.getBean("inboundOsd")
│ 返回 → ExecutorChannel("inboundOsd")
│
▼
④ OsdRouter.osdRouterHandler()
(OsdRouter.java:74)
@ServiceActivator(inputChannel = "inboundOsd")
│
│ 1. 解析 JSON → TopicOsdRequest
│ 2. 从 from/gateway 判断设备类型
│ 3. OsdDeviceTypeEnum.find() → DOCK_DRONE
│ 4. 转换数据类型 → TopicOsdRequest<OsdDockDrone>
│ 5. 发送到子通道 "inboundOsdDockDrone"
│
▼
⑤ AbstractDeviceService.osdDockDrone()
(AbstractDeviceService.java:61)
@ServiceActivator(inputChannel = "inboundOsdDockDrone")
│
│ throw new UnsupportedOperationException()
│ (抽象类中仅占位,实际被子类覆盖)
│
▼
⑥ SDKDeviceService.osdDockDrone() ← 真正干活的地方
(drone-manage/SDKDeviceService.java:159)
继承 AbstractDeviceService,Override 此方法
→ 存入 Redis、推送 WebSocket、写入 InfluxDB
