From d9d08181a94d727a4fe5933ac9efd1ff5c8a7c5a Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期三, 16 七月 2025 13:49:13 +0800 Subject: [PATCH] 中间件修改内容: 1、当没农业综合站时即没相关配置项目内容为空时,启动时会产生bug; 2、整理优化代码。 --- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java | 78 +++++++++++++++++++++++++------------- 1 files changed, 51 insertions(+), 27 deletions(-) diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java index ac3e211..1c92e9d 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/mqtt/MqttManager.java @@ -3,12 +3,15 @@ import com.dy.common.mw.channel.mqtt.MqttClientPool; import com.dy.common.mw.protocol4Mqtt.MqttNotify; import com.dy.common.mw.protocol4Mqtt.MqttNotifyInfo; -import com.dy.common.mw.protocol4Mqtt.status.DevOnLineSt; -import com.dy.common.mw.protocol4Mqtt.status.DevRunSt; +import com.dy.common.mw.protocol4Mqtt.status.DevOnLineInfo; +import com.dy.common.mw.protocol4Mqtt.status.DevRunInfo; import com.dy.rtuMw.server.ServerProperties; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.paho.client.mqttv3.MqttClient; + +import java.util.ArrayList; +import java.util.List; /** * @Author: liurunyu @@ -24,6 +27,8 @@ private MqttUnitConfigVo configVo ; private MqttClientPool pool; + + private List<MqttClient> subClients ; private MqttManager(){ } @@ -43,8 +48,9 @@ * @throws Exception */ public void start()throws Exception{ + subClients = new ArrayList<>(); String URL = "tcp://" + this.configVo.svIp + ":" + this.configVo.svPort; - this.pool = new MqttClientPool(URL, this.configVo.svUserName, this.configVo.svUserPassword, this.configVo.poolMaxSize); + this.pool = new MqttClientPool(URL, this.configVo.svUserName, this.configVo.svUserPassword, this.configVo.poolMaxSize, this.configVo.useMemoryPersistence); if(this.pool.isClose()){ throw new Exception("Mqtt杩炴帴姹犲垵濮嬪寲澶辫触"); } @@ -57,39 +63,57 @@ if(clientSub == null || !clientSub.isConnected()){ throw new Exception("Mqtt杩炴帴姹犺幏寰楄闃呰繛鎺ヤ笉鍙敤"); } + subClients.add(clientSub) ; + // 璁㈤槄涓婚 - for(int i = 0; i < this.configVo.subTopics.length; i++){ - for(int j = 0 ; j < this.configVo.protocolAndDeviceIds.length; j++){ - clientSub.subscribe(ServerProperties.orgTag + "/" - + this.configVo.protocolAndDeviceIds[j] + "/" - + this.configVo.subTopics[i], - this.configVo.subTopicsQos[i], - //姣忎竴涓闃呬富棰橀兘鏈変竴涓狹qttMessageListener瀹炰緥 - new MqttMessageListener(new MqttNotify(){ - @Override - public void notify(String devId, MqttNotifyInfo... infos) { - if(devId != null && infos != null && infos.length > 0){ - for(MqttNotifyInfo info : infos){ - if(info instanceof DevOnLineSt){ - DevOnLineSt onLineSt = (DevOnLineSt)info; - if(onLineSt.onLine != null && onLineSt.onLine.booleanValue()){ - DevStatusDealer.onLine(devId, ((DevOnLineSt)info).protocol); - }else{ - DevStatusDealer.offLine(devId); + if(this.configVo.subTopics != null && this.configVo.subTopics.length > 0){ + if(this.configVo.protocolAndDeviceIds != null || this.configVo.protocolAndDeviceIds.length > 0){ + for(int i = 0; i < this.configVo.subTopics.length; i++){ + for(int j = 0 ; j < this.configVo.protocolAndDeviceIds.length; j++){ + clientSub.subscribe(ServerProperties.orgTag + "/" + + this.configVo.protocolAndDeviceIds[j] + "/" + + this.configVo.subTopics[i], + this.configVo.subTopicsQos[i], + //姣忎竴涓闃呬富棰橀兘鏈変竴涓狹qttMessageListener瀹炰緥 + new MqttMessageListener(new MqttNotify(){ + @Override + public void notify(String devId, MqttNotifyInfo... infos) { + if(devId != null && infos != null && infos.length > 0){ + for(MqttNotifyInfo info : infos){ + if(info instanceof DevOnLineInfo){ + DevOnLineInfo onLineSt = (DevOnLineInfo)info; + if(onLineSt.onLine != null && onLineSt.onLine.booleanValue()){ + DevStatusDealer.onLine(devId, ((DevOnLineInfo)info).protocol); + }else{ + DevStatusDealer.offLine(devId); + } + } else if(info instanceof DevRunInfo){ + DevStatusDealer.setStatus(devId, (DevRunInfo)info); + } } - } else if(info instanceof DevRunSt){ - DevStatusDealer.setStatus(devId, (DevRunSt)info); } } - } - } - }) - ); + }) + ); + } + } } } } public void stop()throws Exception{ + if(subClients != null && subClients.size() > 0){ + for (MqttClient client : subClients) { + if(client != null && client.isConnected()){ + try{ + client.disconnect(); + client.close(); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + } if(this.pool != null){ // 鍏抽棴杩炴帴姹� this.pool.close(); -- Gitblit v1.8.0