Browse Source

fix报警websocket重连少写了项目名称的bug

luoguangyi 3 years ago
parent
commit
41129d7fb9

+ 1 - 1
ibms-data-sdk/pom.xml

@@ -216,7 +216,7 @@
 		<dependency>
 			<groupId>com.persagy</groupId>
 			<artifactId>sailfish</artifactId>
-			<version>0.0.19</version>
+			<version>0.0.18</version>
 		</dependency>
 	</dependencies>
 

+ 66 - 32
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/WebSocketCheckThread.java

@@ -1,10 +1,9 @@
 package com.persagy.ibms.data.sdk.service;
 
 import java.net.URI;
-import java.net.URISyntaxException;
-
-import javax.annotation.PostConstruct;
-
+import org.java_websocket.WebSocket;
+import org.java_websocket.client.WebSocketClient;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import com.persagy.ibms.data.sdk.util.RepositoryContainer;
@@ -17,43 +16,78 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 @Component
 public class WebSocketCheckThread extends Thread {
-	@PostConstruct
-	public void init() {
-		new Thread(this).start();
-	}
 
-	public void run() {
-		while (true) {
+
+
+	/**
+	 * @param :
+	 * @description:启动专门的定时任务去自动断开重新连接(10秒钟监测一次)
+	 * @exception:
+	 * @author: LuoGuangyi
+	 * @company: Persagy Technology Co.,Ltd
+	 * @return: null
+	 * @since: 2020/10/20 9:54
+	 * @version: V1.0
+	 */
+	@Scheduled(initialDelay = 20000, fixedDelay = 120000)
+	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);
+			//重连异常后删除旧的连接并重新连接
 			try {
-				Thread.sleep(1000L * 15);
-			} catch (InterruptedException e) {
-				log.error(e.getMessage(), e);
+				if (!IOTWebSocketClient.client.isOpen()) {
+					IOTWebSocketClient.client.close();
+					IOTWebSocketClient.client = new IOTWebSocketClient(new URI(Constant.iot_websocket_url + "?projectId="
+							+ RepositoryContainer.RepositoryBase.projectId.substring(2) + "&type=iot,text,pointset"));
+					IOTWebSocketClient.client.connect();
+				}
+			} catch (Exception e2) {
+				log.error(e2.getMessage(),e2);
 			}
+		}
 
-			if (IOTWebSocketClient.client != null) {
-				try {
-					if (!IOTWebSocketClient.client.isOpen()) {
-						IOTWebSocketClient.client = new IOTWebSocketClient(new URI(Constant.iot_websocket_url + "?projectId="
-								+ RepositoryContainer.RepositoryBase.projectId.substring(2) + "&type=iot,text,pointset"));
-						IOTWebSocketClient.client.connect();
-					}
-				} catch (URISyntaxException e) {
-					log.warn(e.getMessage(), e);
-					log.error(e.getMessage(), e);
+		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();
 				}
 			}
-			if (AlarmWebSocketClient.client != null) {
-				try {
-					if (!AlarmWebSocketClient.client.isOpen()) {
-						AlarmWebSocketClient.client = new AlarmWebSocketClient(new URI(Constant.iot_websocket_url));
-						AlarmWebSocketClient.client.connect();
-					}
-				} catch (URISyntaxException e) {
-					log.warn(e.getMessage(), e);
-					log.error(e.getMessage(), e);
+		} catch (Exception e) {
+			log.error("连接发生异常,尝试重新连接", e);
+			//重连异常后删除旧的连接并重新连接
+			try {
+				if (!AlarmWebSocketClient.client.isOpen()) {
+					AlarmWebSocketClient.client.close();
+					AlarmWebSocketClient.client = new AlarmWebSocketClient(new URI(Constant.alarm_websocket_url + "/" + RepositoryContainer.RepositoryBase.projectId));
+					AlarmWebSocketClient.client.connect();
 				}
+			} catch (Exception e2) {
+				log.error(e2.getMessage(),e2);
 			}
 		}
 	}
 
+
 }