From 8cf5b65e3882580be5a9fa815d476fb0da2da6b7 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 19 六月 2023 20:09:16 +0800
Subject: [PATCH] 优化国标级联注册机制
---
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java | 75 ++++++++++++++++++++-----------------
src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java | 20 ++++++++++
src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java | 2
src/main/resources/all-application.yml | 4 ++
src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java | 1
5 files changed, 67 insertions(+), 35 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
index 041d738..95a2499 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
@@ -45,6 +45,7 @@
* @return
*/
public void startCron(String key, Runnable task, int cycleForCatalog) {
+ System.out.println(cycleForCatalog);
ScheduledFuture<?> future = futureMap.get(key);
if (future != null) {
if (future.isCancelled()) {
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
index 55363ef..eb1b157 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
@@ -56,7 +56,7 @@
}
// 璁剧疆鎵�鏈夊钩鍙扮绾�
- platformService.offline(parentPlatform, true);
+ platformService.offline(parentPlatform, false);
}
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
index 0603fc6..b3ccf77 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
@@ -68,6 +68,10 @@
private int maxNotifyCountQueue = 10000;
+ private int registerAgainAfterTime = 60;
+
+ private boolean registerKeepIntDialog = false;
+
public Boolean getSavePositionHistory() {
return savePositionHistory;
}
@@ -287,4 +291,20 @@
public void setCivilCodeFile(String civilCodeFile) {
this.civilCodeFile = civilCodeFile;
}
+
+ public int getRegisterAgainAfterTime() {
+ return registerAgainAfterTime;
+ }
+
+ public void setRegisterAgainAfterTime(int registerAgainAfterTime) {
+ this.registerAgainAfterTime = registerAgainAfterTime;
+ }
+
+ public boolean isRegisterKeepIntDialog() {
+ return registerKeepIntDialog;
+ }
+
+ public void setRegisterKeepIntDialog(boolean registerKeepIntDialog) {
+ this.registerKeepIntDialog = registerKeepIntDialog;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
index 2da81cd..8194309 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
@@ -34,6 +34,8 @@
public class PlatformServiceImpl implements IPlatformService {
private final static String REGISTER_KEY_PREFIX = "platform_register_";
+
+ private final static String REGISTER_FAIL_AGAIN_KEY_PREFIX = "platform_register_fail_again_";
private final static String KEEPALIVE_KEY_PREFIX = "platform_keepalive_";
private final static Logger logger = LoggerFactory.getLogger(PlatformServiceImpl.class);
@@ -140,12 +142,11 @@
// 娉ㄩ攢鏃х殑
try {
if (parentPlatformOld.isStatus()) {
- logger.info("淇濆瓨骞冲彴{}鏃跺彂鐜版晳骞冲彴鍦ㄧ嚎锛屽彂閫佹敞閿�鍛戒护", parentPlatformOld.getServerGBId());
+ logger.info("淇濆瓨骞冲彴{}鏃跺彂鐜版棫骞冲彴鍦ㄧ嚎锛屽彂閫佹敞閿�鍛戒护", parentPlatformOld.getServerGBId());
commanderForPlatform.unregister(parentPlatformOld, parentPlatformCatchOld.getSipTransactionInfo(), null, eventResult -> {
logger.info("[鍥芥爣绾ц仈] 娉ㄩ攢鎴愬姛锛� 骞冲彴锛歿}", parentPlatformOld.getServerGBId());
});
}
-
} catch (InvalidArgumentException | ParseException | SipException e) {
logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 娉ㄩ攢: {}", e.getMessage());
}
@@ -178,9 +179,6 @@
logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈: {}", e.getMessage());
}
}
- // 閲嶆柊寮�鍚畾鏃舵敞鍐岋紝 浣跨敤缁娑堟伅
- // 閲嶆柊寮�濮嬪績璺充繚娲�
-
return false;
}
@@ -189,6 +187,9 @@
@Override
public void online(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo) {
logger.info("[鍥芥爣绾ц仈]锛歿}, 骞冲彴涓婄嚎", parentPlatform.getServerGBId());
+ final String registerFailAgainTaskKey = REGISTER_FAIL_AGAIN_KEY_PREFIX + parentPlatform.getServerGBId();
+ dynamicTask.stop(registerFailAgainTaskKey);
+
platformMapper.updateParentPlatformStatus(parentPlatform.getServerGBId(), true);
ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId());
if (parentPlatformCatch == null) {
@@ -229,15 +230,9 @@
// 姝ゆ椂鏄涓夋蹇冭烦瓒呮椂锛� 骞冲彴绂荤嚎
if (platformCatch.getKeepAliveReply() == 2) {
// 璁剧疆骞冲彴绂荤嚎锛屽苟閲嶆柊娉ㄥ唽
- logger.info("[鍥芥爣绾ц仈] {}锛屼笁娆″績璺宠秴鏃跺悗鍐嶆鍙戣捣娉ㄥ唽", parentPlatform.getServerGBId());
- try {
- commanderForPlatform.register(parentPlatform, eventResult1 -> {
- logger.info("[鍥芥爣绾ц仈] {}锛屼笁娆″績璺宠秴鏃跺悗鍐嶆鍙戣捣娉ㄥ唽浠嶇劧澶辫触锛屽紑濮嬪畾鏃跺彂璧锋敞鍐岋紝闂撮殧涓�1鍒嗛挓", parentPlatform.getServerGBId());
- offline(parentPlatform, false);
- }, null);
- } catch (InvalidArgumentException | ParseException | SipException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 娉ㄥ唽: {}", e.getMessage());
- }
+ logger.info("[鍥芥爣绾ц仈] 涓夋蹇冭烦瓒呮椂, 骞冲彴{}({})绂荤嚎", parentPlatform.getName(), parentPlatform.getServerGBId());
+ offline(parentPlatform, false);
+
}
}else {
@@ -263,21 +258,22 @@
private void registerTask(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo){
try {
- // 璁剧疆瓒呮椂閲嶅彂锛� 鍚庣画浠庡簳灞傛敮鎸佹秷鎭噸鍙�
- String key = KEEPALIVE_KEY_PREFIX + parentPlatform.getServerGBId() + "_timeout";
- if (dynamicTask.isAlive(key)) {
- return;
+ // 涓嶅湪鍚屼竴涓細璇濅腑缁鍒欐瘡娆″叏鏂版敞鍐�
+ if (!userSetting.isRegisterKeepIntDialog()) {
+ sipTransactionInfo = null;
}
- dynamicTask.startDelay(key, ()->{
- registerTask(parentPlatform, sipTransactionInfo);
- }, 1000);
- logger.info("[鍥芥爣绾ц仈] 骞冲彴锛歿}娉ㄥ唽鍗冲皢鍒版湡锛屽紑濮嬬画璁�", parentPlatform.getServerGBId());
+
+ if (sipTransactionInfo == null) {
+ logger.info("[鍥芥爣绾ц仈] 骞冲彴锛歿}娉ㄥ唽鍗冲皢鍒版湡锛屽紑濮嬮噸鏂版敞鍐�", parentPlatform.getServerGBId());
+ }else {
+ logger.info("[鍥芥爣绾ц仈] 骞冲彴锛歿}娉ㄥ唽鍗冲皢鍒版湡锛屽紑濮嬬画璁�", parentPlatform.getServerGBId());
+ }
+
commanderForPlatform.register(parentPlatform, sipTransactionInfo, eventResult -> {
- dynamicTask.stop(key);
+ logger.info("[鍥芥爣绾ц仈] 骞冲彴锛歿}娉ㄥ唽澶辫触锛寋}:{}", parentPlatform.getServerGBId(),
+ eventResult.statusCode, eventResult.msg);
offline(parentPlatform, false);
- },eventResult -> {
- dynamicTask.stop(key);
- });
+ }, null);
} catch (InvalidArgumentException | ParseException | SipException e) {
logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈瀹氭椂娉ㄥ唽: {}", e.getMessage());
}
@@ -298,24 +294,35 @@
// 鍋滄鎵�鏈夋帹娴�
logger.info("[骞冲彴绂荤嚎] {}, 鍋滄鎵�鏈夋帹娴�", parentPlatform.getServerGBId());
stopAllPush(parentPlatform.getServerGBId());
- if (stopRegister) {
- // 娓呴櫎娉ㄥ唽瀹氭椂
- logger.info("[骞冲彴绂荤嚎] {}, 鍋滄瀹氭椂娉ㄥ唽浠诲姟", parentPlatform.getServerGBId());
- final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId();
- if (dynamicTask.contains(registerTaskKey)) {
- dynamicTask.stop(registerTaskKey);
- }
+
+ // 娓呴櫎娉ㄥ唽瀹氭椂
+ logger.info("[骞冲彴绂荤嚎] {}, 鍋滄瀹氭椂娉ㄥ唽浠诲姟", parentPlatform.getServerGBId());
+ final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId();
+ if (dynamicTask.contains(registerTaskKey)) {
+ dynamicTask.stop(registerTaskKey);
}
// 娓呴櫎蹇冭烦瀹氭椂
logger.info("[骞冲彴绂荤嚎] {}, 鍋滄瀹氭椂鍙戦�佸績璺充换鍔�", parentPlatform.getServerGBId());
final String keepaliveTaskKey = KEEPALIVE_KEY_PREFIX + parentPlatform.getServerGBId();
if (dynamicTask.contains(keepaliveTaskKey)) {
- // 娣诲姞蹇冭烦浠诲姟
+ // 娓呴櫎蹇冭烦浠诲姟
dynamicTask.stop(keepaliveTaskKey);
}
// 鍋滄鐩綍璁㈤槄鍥炲
logger.info("[骞冲彴绂荤嚎] {}, 鍋滄璁㈤槄鍥炲", parentPlatform.getServerGBId());
subscribeHolder.removeAllSubscribe(parentPlatform.getServerGBId());
+ // 鍙戣捣瀹氭椂鑷姩閲嶆柊娉ㄥ唽
+ if (!stopRegister) {
+ // 璁剧疆涓�60绉掕嚜鍔ㄥ皾璇曢噸鏂版敞鍐�
+ final String registerFailAgainTaskKey = REGISTER_FAIL_AGAIN_KEY_PREFIX + parentPlatform.getServerGBId();
+ ParentPlatform platform = platformMapper.getParentPlatById(parentPlatform.getId());
+ if (platform.isEnable()) {
+ dynamicTask.startCron(registerFailAgainTaskKey,
+ ()-> registerTask(platform, null),
+ userSetting.getRegisterAgainAfterTime() * 1000);
+ }
+
+ }
}
private void stopAllPush(String platformId) {
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
index 0fba9a9..90cde6f 100644
--- a/src/main/resources/all-application.yml
+++ b/src/main/resources/all-application.yml
@@ -185,6 +185,10 @@
max-notify-count-queue: 10000
# 璁惧/閫氶亾鐘舵�佸彉鍖栨椂鍙戦�佹秷鎭�
device-status-notify: false
+ # 鍥芥爣绾ц仈绂荤嚎鍚庡涔呴噸璇曚竴娆℃敞鍐�
+ register-again-after-time: 60
+ # 鍥芥爣缁鏂瑰紡锛宼rue涓虹画璁紝姣忔娉ㄥ唽鍦ㄥ悓涓�涓細璇濋噷锛宖alse涓洪噸鏂版敞鍐岋紝姣忔浣跨敤鏂扮殑浼氳瘽
+ register-keep-int-dialog: false
# 璺ㄥ煙閰嶇疆锛岄厤缃綘璁块棶鍓嶇椤甸潰鐨勫湴鍧�鍗冲彲锛� 鍙互閰嶇疆澶氫釜
allowed-origins:
- http://localhost:8008
--
Gitblit v1.8.0