From 08098bbf525d98471fee98a40ef1e64bd32e48b8 Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Mon, 28 Jul 2025 16:41:23 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E5=90=AF=E5=8A=A8=E6=97=B6=E6=A3=80=E6=9F=A5serverId?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=94=AF=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1475246358495232]服务器启动时检查serverId是否唯一 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1475246358495232 --- .../framework/common/config/Config.java | 7 ++++++ .../heartbeat/core/HeartbeatManager.java | 22 +++++++++++++++++++ .../heartbeat/dao/mapper/ServerMapper.java | 2 ++ .../heartbeat/dao/mapper/ServerMapper.xml | 13 ++++++++--- .../heartbeat/dto/ServerClusterVo.java | 9 ++++++++ .../changelog/2025-07-28/neatlogic.sql | 2 ++ .../changelog/2025-07-28/version.json | 12 ++++++++++ 7 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/neatlogic/resources/framework/changelog/2025-07-28/neatlogic.sql create mode 100644 src/main/resources/neatlogic/resources/framework/changelog/2025-07-28/version.json diff --git a/src/main/java/neatlogic/framework/common/config/Config.java b/src/main/java/neatlogic/framework/common/config/Config.java index df2313d1d..9d8e5e2ec 100644 --- a/src/main/java/neatlogic/framework/common/config/Config.java +++ b/src/main/java/neatlogic/framework/common/config/Config.java @@ -46,6 +46,8 @@ public class Config { private static final String SERVER_ID_FILE = "serverid.conf"; public static int SCHEDULE_SERVER_ID; + + private static int SCHEDULE_SERVER_ID_CHECK_ENABLE;// 启用服务器ID检查,防止两台服务器ID相同 // public static String SERVER_HOST; public static final String RESPONSE_TYPE_JSON = "application/json;charset=UTF-8"; @@ -211,6 +213,10 @@ public class Config { } + public static int SCHEDULE_SERVER_ID_CHECK_ENABLE() { + return SCHEDULE_SERVER_ID_CHECK_ENABLE; + } + public static String NEATLOGIC_HOME() { return NEATLOGIC_HOME; } @@ -596,6 +602,7 @@ public class Config { public static void loadNacosProperties(Properties prop) { try { + SCHEDULE_SERVER_ID_CHECK_ENABLE = Integer.parseInt(prop.getProperty("schedule.serverid.check.enable", "1")); DATA_HOME = prop.getProperty("data.home", "/app/data"); AUDIT_HOME = prop.getProperty("audit.home"); SERVER_HEARTBEAT_RATE = Integer.parseInt(prop.getProperty("heartbeat.rate", "60")); diff --git a/src/main/java/neatlogic/framework/heartbeat/core/HeartbeatManager.java b/src/main/java/neatlogic/framework/heartbeat/core/HeartbeatManager.java index 998920cec..69ed5acc2 100644 --- a/src/main/java/neatlogic/framework/heartbeat/core/HeartbeatManager.java +++ b/src/main/java/neatlogic/framework/heartbeat/core/HeartbeatManager.java @@ -30,6 +30,8 @@ import neatlogic.framework.heartbeat.dao.mapper.TenantServerMapper; import neatlogic.framework.heartbeat.dto.ServerClusterVo; import neatlogic.framework.heartbeat.dto.ServerCounterVo; import neatlogic.framework.transaction.util.TransactionUtil; +import neatlogic.framework.util.$; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.transaction.TransactionStatus; @@ -63,6 +65,25 @@ public class HeartbeatManager extends ModuleInitializedListenerBase { private static final Set set = new HashSet<>(); public final void myInit() { + String ip = StringUtils.EMPTY; + if (Objects.equals(Config.SCHEDULE_SERVER_ID_CHECK_ENABLE(), 1)) { + String userFunctionValue = serverMapper.getUserFunctionValue(); // 获取到 root@192.168.8.240 + if (StringUtils.isNotBlank(userFunctionValue)) { + int index = userFunctionValue.indexOf("@"); + if (index != -1) { + ip = userFunctionValue.substring(index + 1); + } else { + ip = userFunctionValue; + } + } + ServerClusterVo serverVo = serverMapper.getServerByServerId(Config.SCHEDULE_SERVER_ID); + if (serverVo != null && StringUtils.isNotBlank(serverVo.getIp())) { + if (!Objects.equals(serverVo.getIp(), ip)) { + System.err.println($.t("nfhc.heartbeatmanager.myinit.startupfailureprompt", Config.SCHEDULE_SERVER_ID, serverVo.getIp())); + System.exit(1); + } + } + } // 服务器重启时,先重置与自己相关的数据 getServerLock(Config.SCHEDULE_SERVER_ID); // 重新插入一条服务器信息 @@ -73,6 +94,7 @@ public class HeartbeatManager extends ModuleInitializedListenerBase { server.setLcu(SystemUser.SYSTEM.getUserUuid()); server.setHeartbeatRate(Config.SERVER_HEARTBEAT_RATE()); server.setHeartbeatThreshold(Config.SERVER_HEARTBEAT_THRESHOLD()); + server.setIp(ip); serverMapper.insertServer(server); // serverMapper.insertServerRunTime(Config.SCHEDULE_SERVER_ID, START_TIME); ScheduledExecutorService heartbeatService = Executors.newScheduledThreadPool(1, r -> { diff --git a/src/main/java/neatlogic/framework/heartbeat/dao/mapper/ServerMapper.java b/src/main/java/neatlogic/framework/heartbeat/dao/mapper/ServerMapper.java index df8fecc3f..180550f95 100644 --- a/src/main/java/neatlogic/framework/heartbeat/dao/mapper/ServerMapper.java +++ b/src/main/java/neatlogic/framework/heartbeat/dao/mapper/ServerMapper.java @@ -17,6 +17,8 @@ public interface ServerMapper { List getAllServerList(); + String getUserFunctionValue(); + //UPDATE int updateServerByServerId(ServerClusterVo server); diff --git a/src/main/java/neatlogic/framework/heartbeat/dao/mapper/ServerMapper.xml b/src/main/java/neatlogic/framework/heartbeat/dao/mapper/ServerMapper.xml index 800d27384..4aae707ef 100644 --- a/src/main/java/neatlogic/framework/heartbeat/dao/mapper/ServerMapper.xml +++ b/src/main/java/neatlogic/framework/heartbeat/dao/mapper/ServerMapper.xml @@ -13,7 +13,8 @@ resultType="neatlogic.framework.heartbeat.dto.ServerClusterVo"> SELECT `host`, `server_id` AS serverId, - `status` + `status`, + `ip` FROM server_status WHERE `server_id` = #{serverId} FOR @@ -27,6 +28,7 @@ `heartbeat_rate` AS heartbeatRate, `heartbeat_threshold` AS heartbeatThreshold, `heartbeat_time` AS heartbeatTime, + `ip` AS ip, `fcu`, `fcd`, `lcu`, @@ -34,6 +36,10 @@ FROM `server_status` + + UPDATE `server_status` SET `status` = #{status} @@ -61,12 +67,13 @@ INSERT INTO server_status(`server_id`, `status`, `heartbeat_rate`, `heartbeat_threshold`, `heartbeat_time`, - `fcu`, `fcd`) - VALUES (#{serverId}, #{status}, #{heartbeatRate}, #{heartbeatThreshold}, NOW(3), #{fcu}, NOW(3)) + `ip`, `fcu`, `fcd`) + VALUES (#{serverId}, #{status}, #{heartbeatRate}, #{heartbeatThreshold}, NOW(3), #{ip}, #{fcu}, NOW(3)) ON DUPLICATE KEY UPDATE `status` = #{status}, `heartbeat_rate` = #{heartbeatRate}, `heartbeat_threshold` = #{heartbeatThreshold}, `heartbeat_time` = NOW(3), + `ip` = #{ip}, `lcu` = #{lcu}, `lcd` = NOW(3) diff --git a/src/main/java/neatlogic/framework/heartbeat/dto/ServerClusterVo.java b/src/main/java/neatlogic/framework/heartbeat/dto/ServerClusterVo.java index 1f9443c61..0ec1d453f 100644 --- a/src/main/java/neatlogic/framework/heartbeat/dto/ServerClusterVo.java +++ b/src/main/java/neatlogic/framework/heartbeat/dto/ServerClusterVo.java @@ -15,6 +15,7 @@ public class ServerClusterVo extends BaseEditorVo { private Integer heartbeatRate; private Integer heartbeatThreshold; private Date heartbeatTime; + private String ip; public String getHost() { return host; @@ -58,4 +59,12 @@ public class ServerClusterVo extends BaseEditorVo { public void setHeartbeatTime(Date heartbeatTime) { this.heartbeatTime = heartbeatTime; } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } } diff --git a/src/main/resources/neatlogic/resources/framework/changelog/2025-07-28/neatlogic.sql b/src/main/resources/neatlogic/resources/framework/changelog/2025-07-28/neatlogic.sql new file mode 100644 index 000000000..ac7639861 --- /dev/null +++ b/src/main/resources/neatlogic/resources/framework/changelog/2025-07-28/neatlogic.sql @@ -0,0 +1,2 @@ +ALTER TABLE `server_status` + ADD COLUMN `ip` VARCHAR (50) NULL COMMENT '应用服务器IP' AFTER `heartbeat_time`; \ No newline at end of file diff --git a/src/main/resources/neatlogic/resources/framework/changelog/2025-07-28/version.json b/src/main/resources/neatlogic/resources/framework/changelog/2025-07-28/version.json new file mode 100644 index 000000000..31789c9d8 --- /dev/null +++ b/src/main/resources/neatlogic/resources/framework/changelog/2025-07-28/version.json @@ -0,0 +1,12 @@ +{ + "content": [ + { + "type": "功能", + "detail": [ + { + "msg": "1.服务器启动时检查serverId是否唯一" + } + ] + } + ] +} -- Gitee