# OPC消息处理功能实现 根据DDD架构设计实现了OPC(运维客户端)消息处理功能,完成了从Python版本到Java版本的迁移。 ## 功能简介 OPC消息处理功能主要处理来自运维客户端的请求,包括: 1. 获取告警参数 - 获取系统中配置的全局告警参数 2. 设置告警参数 - 更新系统的全局告警参数,并应用到所有设备 这些功能在Python版本中通过`deal_opc_msg`函数处理,现在已经按照DDD架构在Java版本中重新实现。 ## 架构设计 遵循DDD设计原则,代码分为以下几层: ### 1. 领域层 (Domain Layer) - `AlarmConfigService` - 告警配置服务接口,定义了管理告警配置的领域行为 - `AlarmConfigServiceImpl` - 告警配置服务实现,处理告警参数的获取和更新 - 扩展了`Device`实体,添加了`updateAlarmConfig`方法,支持更新设备的告警配置 ### 2. 应用层 (Application Layer) - `OpcService` - 运维客户端服务接口,定义了处理OPC消息的应用服务 - `OpcServiceImpl` - 运维客户端服务实现,处理OPC消息并调用领域服务 ### 3. 基础设施层 (Infrastructure Layer) - `OpcMessageSubscriber` - OPC消息订阅者,订阅和处理OPC相关的MQTT消息 - 扩展了`MqttGateway`接口,添加了发送告警参数响应和确认的方法 - 实现了`MqttGatewayImpl`中的新方法,发送MQTT响应消息 - 配置了OPC消息的MQTT通道和消息处理器 ## 消息流程 1. **获取告警参数**: - 客户端发送请求到`/opc/get_alarm_param`主题 - `OpcMessageSubscriber`接收消息并调用`OpcService.handleGetAlarmParam` - `OpcServiceImpl`调用领域服务`AlarmConfigService.getGlobalAlarmConfig`获取配置 - 通过`MqttGateway.sendAlarmParamResponse`发送响应 2. **设置告警参数**: - 客户端发送请求到`/opc/set_alarm_param`主题,包含新的参数值 - `OpcMessageSubscriber`接收消息并调用`OpcService.handleSetAlarmParam` - `OpcServiceImpl`解析请求并调用`AlarmConfigService.updateGlobalAlarmConfig`更新配置 - `AlarmConfigService`更新全局配置并通过`applyGlobalConfigToAllDevices`应用到所有设备 - 通过`MqttGateway.sendSetAlarmParamAck`发送确认响应 ## 与Python版本的比较 Java版本与Python版本的主要区别: 1. **架构差异**: - Python版本使用过程式编程,功能集中在少数函数中 - Java版本使用DDD架构,将功能分散到不同层次的服务和实体中 2. **消息处理**: - Python版本直接在消息处理函数中修改全局配置 - Java版本通过应用服务和领域服务处理消息和配置管理 3. **配置管理**: - Python版本使用全局变量和锁管理配置 - Java版本使用领域服务和Spring配置管理配置 ## 使用示例 运维客户端可以通过以下方式使用这些功能: 1. **获取告警参数**: ```json // 发送到 /opc/get_alarm_param {} ``` 2. **设置告警参数**: ```json // 发送到 /opc/set_alarm_param { "global": { "retention_time": 60000, "retention_keep_time": 30000, "retention_alarm_time": 180000 } } ```