Browse Source

增加报警异常处理,运行控制重连

menglu 3 years ago
parent
commit
bbf8679d43

+ 60 - 46
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/WebSocketCheckThread.java

@@ -16,8 +16,8 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 @Component
 public class WebSocketCheckThread extends Thread {
-
-
+	public static volatile boolean iot_websocket_reconnect = true;
+	public static volatile boolean alarm_websocket_reconnect = true;
 
 	/**
 	 * @param :
@@ -31,63 +31,77 @@ public class WebSocketCheckThread extends Thread {
 	 */
 	@Scheduled(initialDelay = 60000, fixedDelay = 5000)
 	public void holderConneted() {
-		try {
-			WebSocketClient outCallWebSocketClientHolder = IOTWebSocketClient.client;
-			if (null == outCallWebSocketClientHolder) {
-				log.info("当前连接还未建立");
-				return;
-			}
-			if (!outCallWebSocketClientHolder.isOpen()) {
-				log.error("连接已经断开,正在重新连接,当前状态为[{}]", outCallWebSocketClientHolder.getReadyState());
-				if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.NOT_YET_CONNECTED)) {
-					outCallWebSocketClientHolder.connect();
-				} else if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSING) || outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSED)) {
-					outCallWebSocketClientHolder.reconnect();
-				}
-			}
-		} catch (Exception e) {
-			log.error("连接发生异常,尝试重新连接", e);
-			//重连异常后删除旧的连接并重新连接
+		if (iot_websocket_reconnect) {
 			try {
-				if (!IOTWebSocketClient.client.isOpen()) {
-					IOTWebSocketClient.client.close();
+				WebSocketClient outCallWebSocketClientHolder = IOTWebSocketClient.client;
+				if (null == outCallWebSocketClientHolder) {
+					log.info("IOT当前连接还未建立");
+					return;
+				}
+				if (!outCallWebSocketClientHolder.isOpen()) {
+					log.error("IOT连接已经断开,正在重新连接,当前状态为[{}]", outCallWebSocketClientHolder.getReadyState());
+					if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.NOT_YET_CONNECTED)) {
+						outCallWebSocketClientHolder.connect();
+					} else if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSING)
+							|| outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSED)) {
+						outCallWebSocketClientHolder.reconnect();
+					}
+				}
+			} catch (Exception e) {
+				log.error("IOT连接发生异常,尝试重新连接", e);
+				// 重连异常后删除旧的连接并重新连接
+				try {
+					if (!IOTWebSocketClient.client.isOpen()) {
+						IOTWebSocketClient.client.close();
+					}
+				} catch (Exception e2) {
+					log.error(e2.getMessage(), e2);
+				}
+				try {
 					IOTWebSocketClient.client = new IOTWebSocketClient(new URI(Constant.iot_websocket_url + "?projectId="
 							+ RepositoryContainer.RepositoryProject.projectId.substring(2) + "&type=iot,text,pointset"));
 					IOTWebSocketClient.client.connect();
+				} catch (Exception e2) {
+					log.error(e2.getMessage(), e2);
 				}
-			} catch (Exception e2) {
-				log.error(e2.getMessage(),e2);
 			}
 		}
 
-		try {
-			WebSocketClient outCallWebSocketClientHolder = AlarmWebSocketClient.client;
-			if (null == outCallWebSocketClientHolder) {
-				log.info("当前连接还未建立");
-				return;
-			}
-			if (!outCallWebSocketClientHolder.isOpen()) {
-				log.error("连接已经断开,正在重新连接,当前状态为[{}]", outCallWebSocketClientHolder.getReadyState());
-				if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.NOT_YET_CONNECTED)) {
-					outCallWebSocketClientHolder.connect();
-				} else if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSING) || outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSED)) {
-					outCallWebSocketClientHolder.reconnect();
-				}
-			}
-		} catch (Exception e) {
-			log.error("连接发生异常,尝试重新连接", e);
-			//重连异常后删除旧的连接并重新连接
+		if (alarm_websocket_reconnect) {
 			try {
-				if (!AlarmWebSocketClient.client.isOpen()) {
-					AlarmWebSocketClient.client.close();
-					AlarmWebSocketClient.client = new AlarmWebSocketClient(new URI(Constant.alarm_websocket_url + "/" + RepositoryContainer.RepositoryProject.projectId));
+				WebSocketClient outCallWebSocketClientHolder = AlarmWebSocketClient.client;
+				if (null == outCallWebSocketClientHolder) {
+					log.info("Alarm当前连接还未建立");
+					return;
+				}
+				if (!outCallWebSocketClientHolder.isOpen()) {
+					log.error("Alarm连接已经断开,正在重新连接,当前状态为[{}]", outCallWebSocketClientHolder.getReadyState());
+					if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.NOT_YET_CONNECTED)) {
+						outCallWebSocketClientHolder.connect();
+					} else if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSING)
+							|| outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSED)) {
+						outCallWebSocketClientHolder.reconnect();
+					}
+				}
+			} catch (Exception e) {
+				log.error("Alarm连接发生异常,尝试重新连接", e);
+				// 重连异常后删除旧的连接并重新连接
+				try {
+					if (!AlarmWebSocketClient.client.isOpen()) {
+						AlarmWebSocketClient.client.close();
+					}
+				} catch (Exception e2) {
+					log.error(e2.getMessage(), e2);
+				}
+				try {
+					AlarmWebSocketClient.client = new AlarmWebSocketClient(
+							new URI(Constant.alarm_websocket_url + "/" + RepositoryContainer.RepositoryProject.projectId));
 					AlarmWebSocketClient.client.connect();
+				} catch (Exception e2) {
+					log.error(e2.getMessage(), e2);
 				}
-			} catch (Exception e2) {
-				log.error(e2.getMessage(),e2);
 			}
 		}
 	}
 
-
 }

+ 47 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/BaseApi.java

@@ -21,6 +21,7 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.persagy.ibms.core.util.CheckUtil;
 import com.persagy.ibms.core.util.LogOfDownload;
 import com.persagy.ibms.core.util.LogOfRun;
+import com.persagy.ibms.data.sdk.service.WebSocketCheckThread;
 import com.persagy.ibms.data.sdk.service.websocket.server.WebSocketChannelInfo;
 import com.persagy.ibms.data.sdk.service.websocket.server.WebSocketChannelPool;
 import com.persagy.ibms.data.sdk.service.websocket.server.WebSocketUtil;
@@ -64,6 +65,52 @@ public class BaseApi {
 		return "Hello World!" + "\n" + param;
 	}
 
+	@GetMapping(path = "/iot_websocket_reconnect/{param}")
+	String iot_websocket_reconnect(@PathVariable("param") String param) {
+		String result;
+		if (param.equals("start")) {
+			if (WebSocketCheckThread.iot_websocket_reconnect) {
+				result = "iot_websocket_reconnect is start , no operation";
+			} else {
+				WebSocketCheckThread.iot_websocket_reconnect = true;
+				result = "iot_websocket_reconnect set to start";
+			}
+		} else if (param.equals("stop")) {
+			if (WebSocketCheckThread.iot_websocket_reconnect) {
+				WebSocketCheckThread.iot_websocket_reconnect = false;
+				result = "iot_websocket_reconnect set to stop";
+			} else {
+				result = "iot_websocket_reconnect is stop , no operation";
+			}
+		} else {
+			result = WebSocketCheckThread.iot_websocket_reconnect ? "start" : "stop";
+		}
+		return result;
+	}
+
+	@GetMapping(path = "/alarm_websocket_reconnect/{param}")
+	String alarm_websocket_reconnect(@PathVariable("param") String param) {
+		String result;
+		if (param.equals("start")) {
+			if (WebSocketCheckThread.alarm_websocket_reconnect) {
+				result = "alarm_websocket_reconnect is start , no operation";
+			} else {
+				WebSocketCheckThread.alarm_websocket_reconnect = true;
+				result = "alarm_websocket_reconnect set to start";
+			}
+		} else if (param.equals("stop")) {
+			if (WebSocketCheckThread.alarm_websocket_reconnect) {
+				WebSocketCheckThread.alarm_websocket_reconnect = false;
+				result = "alarm_websocket_reconnect set to stop";
+			} else {
+				result = "alarm_websocket_reconnect is stop , no operation";
+			}
+		} else {
+			result = WebSocketCheckThread.alarm_websocket_reconnect ? "start" : "stop";
+		}
+		return result;
+	}
+
 	@GetMapping(path = "/iot_websocket_close")
 	public String iot_websocket_close() {
 		IOTWebSocketClient.client.close();

+ 12 - 3
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDAlarmUtil.java

@@ -664,9 +664,18 @@ public class RWDAlarmUtil {
 			RepositoryContainer.RepositoryProject.id2alarmList.get(objId).value_array.set.clear();
 			RepositoryContainer.RepositoryProject.id2alarmCount.get(objId).value_prim.value = 0;
 		}
-		for (int i = 0; i < Content.size(); i++) {
-			JSONObject alarm = Content.getJSONObject(i);
-			RWDAlarmUtil.exe_ProcessAlarm(alarm, false);
+		try {
+			for (int i = 0; i < Content.size(); i++) {
+				JSONObject alarm = Content.getJSONObject(i);
+				try {
+					RWDAlarmUtil.exe_ProcessAlarm(alarm, false);
+				} catch (Exception e) {
+					log.error(alarm.toJSONString());
+					log.error(e.getMessage(), e);
+				}
+			}
+		} catch (Exception e) {
+			log.error(e.getMessage(), e);
 		}
 		RepositoryContainer.instance.recomputeAlarm();
 	}