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 加密
- 配置监控和告警
下一步工作
- 完成依赖更新: 运行
go mod tidy - 前端集成: 在主页面添加 edgeOS 组件
- 完善测试: 添加单元测试和集成测试
- 性能测试: 压力测试和性能调优
- 文档完善: 更新用户手册和 API 文档
- 示例代码: 提供更多使用示例
参考资源
贡献者
- 实现: EdgeX Gateway 开发团队
- 协议规范: edgeOS 团队
许可证
遵循 EdgeX Gateway 项目许可证。