edgeOS 北向通道开发完成总结

已完成的工作

1. 后端实现

1.1 edgeOS(MQTT) 客户端

  • 文件: internal/northbound/edgos_mqtt/client.go
  • 功能:
    • MQTT 3.1.1 协议支持
    • 自动重连机制
    • 节点注册与心跳上报
    • 实时数据上报
    • 设备状态上报
    • 命令接收与响应(设备发现、写入命令、任务控制)
    • 统计信息跟踪
    • LWT (Last Will Testament) 支持

1.2 edgeOS(NATS) 客户端

  • 文件: internal/northbound/edgos_nats/client.go
  • 功能:
    • NATS 2.x 协议支持
    • JetStream 持久化支持
    • 请求/响应模式
    • Subject 通配符支持
    • 自动重连机制
    • 节点注册与心跳上报
    • 实时数据上报
    • 命令接收与响应

1.3 配置管理

  • 文件: internal/core/northbound_manager.go (已更新)
  • 文件: internal/core/northbound_manager_edgos.go (新增)
  • 功能:
    • edgeOS 配置的增删改查
    • 配置热更新支持
    • 客户端生命周期管理

1.4 数据模型

  • 文件: internal/model/types.go (已更新)
  • 新增类型:
    • EdgeOSMQTTConfig: edgeOS(MQTT) 配置结构
    • EdgeOSNATSConfig: edgeOS(NATS) 配置结构
    • NorthboundConfig 包含 edgeOS 配置数组

1.5 API 端点

  • 文件: internal/server/server_edgos.go (新增)
  • 文件: internal/server/server.go (已更新)
  • 端点:
    • POST /northbound/edgeos-mqtt - 创建/更新 edgeOS(MQTT) 配置
    • DELETE /northbound/edgeos-mqtt/:id - 删除 edgeOS(MQTT) 配置
    • GET /northbound/edgeos-mqtt/:id/stats - 获取 edgeOS(MQTT) 统计
    • POST /northbound/edgeos-mqtt/publish - 发布消息到 edgeOS(MQTT)
    • POST /northbound/edgeos-nats - 创建/更新 edgeOS(NATS) 配置
    • DELETE /northbound/edgeos-nats/:id - 删除 edgeOS(NATS) 配置
    • GET /northbound/edgeos-nats/:id/stats - 获取 edgeOS(NATS) 统计
    • POST /northbound/edgeos-nats/publish - 发布消息到 edgeOS(NATS)

1.6 依赖管理

  • 文件: go.mod (已更新)
  • 新增依赖: github.com/nats-io/nats v1.31.0

2. 前端实现

2.1 卡片组件

  • NorthboundEdgeOSMqtt.vue: edgeOS(MQTT) 通道卡片显示
  • NorthboundEdgeOSNats.vue: edgeOS(NATS) 通道卡片显示
  • 功能:
    • 显示通道基本信息
    • 显示连接状态
    • 提供操作按钮(帮助、配置、统计、删除)
    • 复制功能

2.2 配置对话框

  • EdgeOSMQTTSettingsDialog.vue: edgeOS(MQTT) 配置表单
  • EdgeOSNATSSettingsDialog.vue: edgeOS(NATS) 配置表单
  • 功能:
    • 完整的配置表单
    • 设备映射选择
    • 表单验证
    • 新增/编辑模式

2.3 帮助文档

  • EdgeOSHelpDialog.vue: edgeOS 协议帮助对话框
  • 功能:
    • MQTT 协议说明
    • NATS 协议说明
    • Topic/Subject 列表
    • 消息格式示例
    • 配置参数说明

3. 文档

3.1 实现文档

  • docs/edgeos-northbound.md: 完整的实现文档
    • 架构设计
    • 核心功能说明
    • API 端点文档
    • 消息格式规范
    • 使用示例
    • 测试方法
    • 性能优化建议
    • 故障排查指南

3.2 快速开始指南

  • docs/edgeos-quickstart.md: 快速开始指南
    • 环境准备
    • 配置步骤
    • 验证方法
    • 消息测试示例
    • 监控与调试
    • 常见问题解答
    • 生产环境部署建议

3.3 配置示例

  • conf/edgeos.example.yaml: edgeOS 配置示例文件

符合协议规范

1. MQTT 主题规范

✅ 节点管理主题 ✅ 设备管理主题 ✅ 点位管理主题 ✅ 数据采集主题 ✅ 控制命令主题 ✅ 事件告警主题 ✅ 响应主题

2. NATS 主题规范

✅ 节点管理 Subject ✅ 设备管理 Subject ✅ 数据采集 Subject ✅ 请求/响应 Subject

3. 消息格式

✅ 统一消息头 (MessageHeader) ✅ 消息体格式 ✅ 消息类型定义 ✅ Correlation ID 支持

待完成事项

1. 依赖更新

需要运行以下命令更新依赖:

cd d:/code/edgex
go mod tidy
go mod download

2. 前端集成

需要在前端主页面中添加 edgeOS 卡片组件:

<NorthboundEdgeOSMqtt 
  :items="edgeosMqttItems" 
  :connectionStatus="edgeosMqttStatus"
  @help="handleEdgeOSHelp"
  @settings="handleEdgeOSSettings"
  @stats="handleEdgeOSStats"
  @delete="handleEdgeOSDelete"
/>

<NorthboundEdgeOSNats 
  :items="edgeosNatsItems" 
  :connectionStatus="edgeosNatsStatus"
  @help="handleEdgeOSHelp"
  @settings="handleEdgeOSSettings"
  @stats="handleEdgeOSStats"
  @delete="handleEdgeOSDelete"
/>

3. 心跳任务

实现周期性心跳发送(可选,目前通过配置控制):

// 可以添加到 NorthboundManager
func (nm *NorthboundManager) startHeartbeatLoop() {
    ticker := time.NewTicker(30 * time.Second)
    go func() {
        for {
            select {
            case <-ticker.C:
                nm.publishEdgeOSHeartbeat()
            case <-nm.ctx.Done():
                return
            }
        }
    }()
}

4. 设备发现功能

完善设备发现响应:

// 在 handleDiscoverCommand 中
func (c *Client) handleDiscoverCommand(...) {
    // 调用南向管理器的设备发现
    devices := c.sb.DiscoverDevices(protocol, network)
    
    // 构造响应
    response := map[string]any{
        "devices": devices,
    }
    c.sendCommandResponse(message.Header, "discover_response", true, "", response)
}

5. 任务执行功能

完善任务控制:

// 在 handleTaskCommand 中
func (c *Client) handleTaskCommand(...) {
    // 解析任务类型
    switch message.Header.MessageType {
    case "task_create":
        // 创建采集任务
    case "task_control":
        // 控制(暂停/恢复/停止)
    }
}

6. 测试用例

添加单元测试和集成测试:

# 单元测试
go test ./internal/northbound/edgos_mqtt/...
go test ./internal/northbound/edgos_nats/...

# 集成测试
go test ./internal/core/... -run TestEdgeOS

验证清单

基础功能

  • MQTT 连接建立
  • MQTT 消息发布
  • MQTT 消息订阅
  • MQTT 自动重连
  • NATS 连接建立
  • NATS 消息发布
  • NATS 消息订阅
  • NATS 自动重连

协议兼容性

  • 节点注册消息
  • 心跳消息
  • 实时数据消息
  • 设备状态消息
  • 设备发现命令
  • 写入命令
  • 命令响应

API 功能

  • 配置创建/更新
  • 配置删除
  • 统计信息获取
  • 消息发布接口

前端功能

  • 卡片显示
  • 配置对话框
  • 帮助文档
  • 主页面集成

错误处理

  • 连接失败处理
  • 发布失败处理
  • 消息解析错误处理
  • 超时处理

性能考虑

1. MQTT 优化

  • QoS 级别可根据场景配置
  • 批量消息发送(可扩展)
  • 连接池(可扩展)

2. NATS 优化

  • JetStream 持久化
  • Subject 批量订阅
  • 连接复用

3. 资源管理

  • Goroutine 数量控制
  • 内存使用监控
  • 连接数限制

安全考虑

1. 认证

  • MQTT 用户名/密码认证
  • NATS 用户名/密码/Token 认证

2. 加密

  • MQTT TLS 支持(可扩展)
  • NATS TLS 支持(可扩展)

3. 访问控制

  • 设备级别过滤
  • Topic/Subject 权限控制(通过 Broker/Server 配置)

部署建议

1. 开发环境

# 启动 MQTT
docker run -d -p 1883:1883 eclipse-mosquitto

# 启动 NATS
docker run -d -p 4222:4222 nats -js

# 启动 EdgeX 网关
go run cmd/main.go

2. 生产环境

  • 使用高可用的 MQTT Broker (EMQX, HiveMQ)
  • 使用高可用的 NATS Cluster
  • 配置合理的重连参数
  • 启用 TLS 加密
  • 配置监控和告警

下一步工作

  1. 完成依赖更新: 运行 go mod tidy
  2. 前端集成: 在主页面添加 edgeOS 组件
  3. 完善测试: 添加单元测试和集成测试
  4. 性能测试: 压力测试和性能调优
  5. 文档完善: 更新用户手册和 API 文档
  6. 示例代码: 提供更多使用示例

参考资源

贡献者

  • 实现: EdgeX Gateway 开发团队
  • 协议规范: edgeOS 团队

许可证

遵循 EdgeX Gateway 项目许可证。