From 55e923c9eb7654e4cfd99c299d48f7b7912bc59c Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 20 十二月 2023 08:53:57 +0800
Subject: [PATCH] 1、通信中间件多个恒久任务由一个线程执行改为一个恒久任务一个线程执行,原因是单个恒久任务可能用时很长 ; 2、优化通信中间件代码

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantThread.java                   |   95 ++++++++++++-------------------
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreUnit.java                             |    6 +-
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java |   14 ++--
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/ToRtuConstantTask.java   |   17 +++--
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantManage.java                   |   43 ++++++++++++++
 5 files changed, 102 insertions(+), 73 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantManage.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantManage.java
new file mode 100644
index 0000000..262df98
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantManage.java
@@ -0,0 +1,43 @@
+package com.dy.common.mw.core;
+
+import java.util.List;
+
+import org.apache.logging.log4j.*;
+
+public class CoreConstantManage {
+	
+	private final static Logger log = LogManager.getLogger(CoreConstantManage.class.getName()) ;
+	
+	private final static CoreConstantManage instance = new CoreConstantManage() ;
+
+	private static Long sleepBigBusy = 100L ;//澶у繖鏃讹紙闄や簡鎭掍箙浠诲姟锛岃繕鏄叾浠栦换鍔★級锛屾牳蹇冪嚎绋嬫殏鍋滈棿闅�
+	private static Long sleepSmallBusy = 500L ;//灏忓繖鏃讹紙鍙湁鎭掍箙浠诲姟锛屾棤鍏朵粬浠诲姟锛夛紝鏍稿績绾跨▼鏆傚仠闂撮殧
+	
+	private CoreConstantManage(){
+	}
+	
+	public static CoreConstantManage getInstance(){
+		return instance ;
+	}
+	
+	/**
+	 * 璁剧疆鏆傚仠鏃堕暱
+	 * @param sleepBigBusy 澶у繖鏃讹紙闄や簡鎭掍箙浠诲姟锛岃繕鏄叾浠栦换鍔★級锛屾牳蹇冪嚎绋嬫殏鍋滈棿闅�
+	 * @param sleepSmallBusy 灏忓繖鏃讹紙鍙湁鎭掍箙浠诲姟锛屾棤鍏朵粬浠诲姟锛夛紝鏍稿績绾跨▼鏆傚仠闂撮殧
+	 */
+	public void setSleep(Long sleepBigBusy, Long sleepSmallBusy){
+		CoreConstantManage.sleepBigBusy = sleepBigBusy ;
+		CoreConstantManage.sleepSmallBusy = sleepSmallBusy ;
+	}
+
+	public void start(){
+		//鎭掍箙浠诲姟
+		List<CoreTask> constantTasks = CoreUnit.getAllConstantTasks();
+		if (constantTasks != null && constantTasks.size() > 0) {
+			for (CoreTask task : constantTasks) {
+				new CoreConstantThread(sleepBigBusy, sleepSmallBusy, task).start();
+			}
+		}
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantThread.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantThread.java
index 0d41ea4..8e497f2 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantThread.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreConstantThread.java
@@ -1,64 +1,45 @@
 package com.dy.common.mw.core;
 
-import java.util.List;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
-import org.apache.logging.log4j.*;
+/**
+ * @Author liurunyu
+ * @Date 2023/12/19 16:41
+ * @LastEditTime 2023/12/19 16:41
+ * @Description
+ */
+public class CoreConstantThread extends Thread {
 
-public class CoreConstantThread extends Thread{
-	
-	private final static Logger log = LogManager.getLogger(CoreConstantThread.class.getName()) ;
-	
-	private final static CoreConstantThread instance = new CoreConstantThread() ;
+    private final static Logger log = LogManager.getLogger(CoreConstantThread.class.getName()) ;
 
-	@SuppressWarnings("unused")
-	private static Long sleepBigBusy = 100L ;//澶у繖鏃讹紙闄や簡鎭掍箙浠诲姟锛岃繕鏄叾浠栦换鍔★級锛屾牳蹇冪嚎绋嬫殏鍋滈棿闅�
-	private static Long sleepSmallBusy = 500L ;//灏忓繖鏃讹紙鍙湁鎭掍箙浠诲姟锛屾棤鍏朵粬浠诲姟锛夛紝鏍稿績绾跨▼鏆傚仠闂撮殧
-	
-	private CoreConstantThread(){
-	}
-	
-	public static CoreConstantThread getInstance(){
-		return instance ;
-	}
-	
-	/**
-	 * 璁剧疆鏆傚仠鏃堕暱
-	 * @param sleepBigBusy 澶у繖鏃讹紙闄や簡鎭掍箙浠诲姟锛岃繕鏄叾浠栦换鍔★級锛屾牳蹇冪嚎绋嬫殏鍋滈棿闅�
-	 * @param sleepSmallBusy 灏忓繖鏃讹紙鍙湁鎭掍箙浠诲姟锛屾棤鍏朵粬浠诲姟锛夛紝鏍稿績绾跨▼鏆傚仠闂撮殧
-	 */
-	public void setSleep(Long sleepBigBusy, Long sleepSmallBusy){
-		CoreConstantThread.sleepBigBusy = sleepBigBusy ;
-		CoreConstantThread.sleepSmallBusy = sleepSmallBusy ;
-	}
+    private long sleepBigBusy ;
+    private long sleepSmallBusy ;
+    private CoreTask task ;
 
-	/**
-	 * 鏍稿績鍗曠嚎绋嬶紝鎵ц鎵�鏈夌殑鍗曠嚎绋嬩换鍔�
-	 */
-	@Override
-	@SuppressWarnings("InfiniteLoopStatement")
-	public void run(){
-		int count ;
-		Integer temp ;
-		while (true) {
-			count = 0;
-			try {
-				//鎭掍箙浠诲姟
-				List<CoreTask> constantTasks = CoreUnit.getAllConstantTasks();
-				if (constantTasks != null && constantTasks.size() > 0) {
-					for (CoreTask task : constantTasks) {
-						temp = task.execute();
-						if (temp != null) {
-							count += temp;
-						}
-					}
-				}
-				if (count == 0) {
-					//灏忔殏鍋滀竴涓�
-					Thread.sleep(sleepSmallBusy);
-				}
-			} catch (Exception e) {
-				log.error("鏍稿績绾跨▼鍙戠敓寮傚父" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e);
-			}
-		}
-	}
+    public CoreConstantThread(long sleepBigBusy, long sleepSmallBusy, CoreTask task){
+        this.sleepBigBusy = sleepBigBusy ;
+        this.sleepSmallBusy = sleepSmallBusy ;
+        this.task = task ;
+    }
+
+    @Override
+    public void run() {
+        if(task != null){
+            int count ;
+            while (true) {
+                try {
+                    count = task.execute();
+                    if (count == 0) {
+                        //灏忔殏鍋滀竴涓�
+                        Thread.sleep(sleepBigBusy);
+                    }else{
+                        Thread.sleep(sleepSmallBusy);
+                    }
+                } catch (Exception e) {
+                    log.error("鎭掍箙浠诲姟" + task.getClass().getName() + "鎵ц鏃跺彂鐢熷紓甯�" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e);
+                }
+            }
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreUnit.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreUnit.java
index 5c5e0df..6fd31f7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreUnit.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/core/CoreUnit.java
@@ -71,9 +71,9 @@
 			ct.setSleep(this.adapter.getConfig().sleepBigBusy, this.adapter.getConfig().sleepSmallBusy);
 			ct.start(); 
 			
-			CoreConstantThread cct = CoreConstantThread.getInstance() ;
-			cct.setSleep(this.adapter.getConfig().sleepBigBusy, this.adapter.getConfig().sleepSmallBusy);
-			cct.start(); 
+			CoreConstantManage ccm = CoreConstantManage.getInstance() ;
+			ccm.setSleep(this.adapter.getConfig().sleepBigBusy, this.adapter.getConfig().sleepSmallBusy);
+			ccm.start();
 			
 			if(adapter.getConfig().showStartInfo){
 				System.out.println("鏍稿績妯″潡鎴愬姛鍚姩锛�"
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
index 3009cc9..fbf4b7c 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
@@ -45,10 +45,10 @@
      */
     private Node doDealRtuUpData(Node first, Node last){
         if(last != null){
+            //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
+            Node pre = last.pre ;
+            dealNode(last) ;
             if(first != last){
-                //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
-                Node pre = last.pre ;
-                dealNode(last) ;
                 return pre ;
             }else{
                 //鍋滄
@@ -102,9 +102,11 @@
      * @param node 鑺傜偣
      */
     private void dealNode(Node node){
-        RtuDataNode obj = (RtuDataNode)node.obj ;
-        obj.dealSelf() ;
-        RtuDataCache.removeNode(node);
+        if(node != null && node.obj != null){
+            RtuDataNode obj = (RtuDataNode)node.obj ;
+            obj.dealSelf() ;
+            RtuDataCache.removeNode(node);
+        }
     }
 
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/ToRtuConstantTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/ToRtuConstantTask.java
index c9b84d6..3de49a2 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/ToRtuConstantTask.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/ToRtuConstantTask.java
@@ -26,6 +26,7 @@
 			log.error("鏇存柊RTU浼氳瘽涓婃姤鏁版嵁鏃跺埢鏃跺彂鐢熼泦鍚堟搷浣滃紓甯革紝姝ゅ紓甯稿苟涓嶅奖鍝嶇郴缁熸甯歌繍琛�", e);
 		}
 		try{
+			//log.info("褰撳墠涓嬭鍛戒护闃熷垪涓繕鏈夌粨鐐规暟閲忥細" + TcpDownCommandCache.size());
 			dealDownCom() ;
 		}catch(Exception e){
 			log.error(e);
@@ -60,10 +61,10 @@
 	 */
 	private Node doDealDownComm(Long now, Node first, Node last){
 		if(last != null){
+			//鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
+			Node pre = last.pre ;
+			dealNode(now, last) ;
 			if(first != last){
-				//鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
-				Node pre = last.pre ;
-				dealNode(now, last) ;
 				return pre ;
 			}else{
 				//鍋滄
@@ -142,10 +143,12 @@
 	 * @param node 鑺傜偣
 	 */
 	private void dealNode(Long now, Node node){
-		TcpDownCommandObj obj = (TcpDownCommandObj)node.obj ;
-		boolean removeNode = obj.dealSelf(now) ;
-		if(removeNode){
-			TcpDownCommandCache.removeNode(node);
+		if(node != null && node.obj != null){
+			TcpDownCommandObj obj = (TcpDownCommandObj)node.obj ;
+			boolean removeNode = obj.dealSelf(now) ;
+			if(removeNode){
+				TcpDownCommandCache.removeNode(node);
+			}
 		}
 	}
 

--
Gitblit v1.8.0