Skip to content

feat(设备网关): 增加连接与消息链路监控能力 - #788

Merged
zhou-hao merged 3 commits into
2.12from
codex/migrate-device-gateway-monitor
Aug 24, 2026
Merged

feat(设备网关): 增加连接与消息链路监控能力#788
zhou-hao merged 3 commits into
2.12from
codex/migrate-device-gateway-monitor

Conversation

@zhou-hao

@zhou-hao zhou-hao commented Aug 21, 2026

Copy link
Copy Markdown
Member

目的

  • 将企业版 DeviceGatewayMonitor 的连接、报文解码和消息上下行扩展能力迁移到社区版。
  • 修复协议通过 FromDeviceMessageContext.handleMessage 手动上报时未进入监控链的问题,同时保留 beforeSendToPlatform 既有语义。

核心变动

  • 模块 / 文件:扩展 gateway-component 的监控 SPI、组合与延迟代理、监控供应商和 Dashboard measurement;适配 TCP、MQTT、HTTP 与 WebSocket 网关。
  • 行为变化:新增现有企业版监控能力及 handleUpstream 统一入口;每个网关只构造一个 platformHandler,协议返回流和手动输出分别复用并各自进入发送前监控。
  • 边界或约束变化:外层 decode 仍只包装一次原始报文生命周期;MQTT ACK 仍为一次;不新增其他 SPI 方法或全局 messageId 去重。
  • 重复消息:协议若手动输出后又返回同一个消息,仍由协议实现负责避免重复。
  • 阶段提交:db894b8415293d482e545666949

设计与测试目标

  • 任务契约:企业版 DeviceGatewayMonitor 社区版迁移,以及所有协议返回值和手动 context.handleMessage 输出进入现有监控链。
  • 权威文档:公共契约已原位同步到 DeviceGatewayMonitor 等源码 Javadoc;不新增任务型仓库文档。
  • 用户确认:已确认,当前为 ready PR。
  • 测试目标:覆盖默认兼容、监控组合顺序、拒绝与错误传播、手动输出与返回值输出各监控一次、空返回流、MQTT ACK、TCP 单次消费,以及 HTTP/WebSocket、MQTT Client/Server 和会话边界。
  • 注释 / 公共契约:适用;公共类和 SPI 方法已补调用时机、可空参数、返回语义、响应式约束、真实 @since 与关键 @see;网关手动输出边界保留短注释。
  • 数据权限:不适用;不涉及 CRUD、AssetsHolder 或用户数据查询权限。
  • 数据库兼容与性能:不适用;未新增 SQL、数据库访问或批量写入。
  • 链路追踪:适用;沿用现有 DeviceTracerMonoTracerFluxTracer,未重复增加 span 或敏感属性。
  • MBean 运维可观测性:不适用;未新增缓存、队列、重试池或后台任务等常驻资源。
  • 系统性求解:适用;违反的不变量是手动输出绕过监控。根因是手动 Publisher 不会自动进入 codec 返回 Flux;最终在各网关共同边界独立包装,未保留 Context 继承假设、fallback、retry 或全局去重分支。

测试结果

  • 测试命令:env JAVA_HOME=/Users/zhouhao/Library/Java/JavaVirtualMachines/temurin-17.0.18/Contents/Home ./mvnw -pl jetlinks-components/gateway-component,jetlinks-components/network-component/tcp-component,jetlinks-components/network-component/mqtt-component,jetlinks-components/network-component/http-component -am -DskipITs test
  • 证据来源与复用判断:本地 JDK 17 阶段验证;最终提交 545666949、tree 76a20e3c49dd3abe15f8422ad3d76e979e98482c。提交只写入 Git 元数据,被测生产代码、测试、配置和依赖未变化。
  • 新增/更新测试:DeviceGatewayMonitorTestGatewayMonitorsTestDeviceGatewayMeasurementProviderTestMqttClientDeviceGatewayTestMqttConnectionSessionTestTcpDeviceSessionTestHttpServerDeviceGatewayTestWebSocketDeviceSessionTest
  • 单元测试:相关 12 个 Maven 模块共 57/57 通过,失败 0,错误 0,跳过 0;其中手动上报定向回归为 DeviceGatewayMonitorTest 6/6、HTTP 1/1、MQTT Client 1/1、TCP 会话 2/2。
  • 集成测试结果或不适用原因:未触发独立外部 IT 门禁;HTTP、MQTT、TCP、WebSocket 已通过真实响应式处理链或会话包装边界验证。未执行真实外部设备联调。
  • 压力测试结果或不适用原因:不适用;未修改性能算法、SQL、批处理、缓存或并发度。
  • 覆盖率:DeviceGatewayMonitor.handleUpstream JaCoCo 行覆盖 2/2、指令覆盖 12/12、方法覆盖 1/1,均为 100%;该方法无分支计数。

文档同步情况

  • 已同步:DeviceGatewayMonitorDeviceGatewayMonitorSupplierGatewayMonitorsGatewayTimeSeriesMetric 等公共源码契约注释。
  • 未同步:无。
  • 说明:权威文档只保留当前已接受状态;任务流水留在当前任务,测试证据放 PR / CI。

风险与说明

  • 影响范围:设备网关监控扩展点、Dashboard 网关指标查询,以及 TCP、MQTT、HTTP/WebSocket 上行链路。
  • 兼容性与发布边界:保留 beforeSendToPlatform 现有语义;新增钩子默认透明,本次收敛同 PR 未发布实现。
  • 注释 / 公共契约:已补类注释、SPI 方法注释、必要 @since / @see 和手动输出边界说明。
  • 数据库兼容与 SQL 性能:不涉及。
  • 链路追踪 / 可观测性:已有 DeviceTracerMonoTracerFluxTracer 覆盖,本次不新增 span。
  • MBean / 运维可观测性:不适用;未新增常驻资源。
  • 未覆盖场景:社区版没有独立 UDP、CoAP 网关模块;未执行真实外部设备联调。
  • 已知限制:协议手动输出后又返回同一消息时仍可能重复提交,由协议实现负责;本次不增加全局去重。
  • 回滚方式:revert 545666949 可撤销本轮手动上报修复;需要完全回退迁移时再依次回退前两个阶段提交。

扩展 DeviceGatewayMonitor 的连接、解码、上行和下行钩子。

接入 TCP、MQTT、HTTP 网络组件并补齐指标查询和回归测试。
@zhou-hao
zhou-hao merged commit 3c9dfc4 into 2.12 Aug 24, 2026
2 of 3 checks passed
@zhou-hao
zhou-hao deleted the codex/migrate-device-gateway-monitor branch August 24, 2026 06:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant