Browse Source

moct-utic-server update

HANTE 1 tháng trước cách đây
mục cha
commit
3e508be41b

+ 1 - 1
conf/moct-utic-server.pid

@@ -1 +1 @@
-21932
+18512

+ 2 - 0
conf/moct-utic-server.yml

@@ -10,4 +10,6 @@ application:
   process-id: 81010
 
 ha-cluster:
+  enabled: true
+  logging: false
   config-file: ${user.dir}/conf/moct-utic-server-cluster.cfg

+ 17 - 4
moct-utic-server/src/main/java/com/utic/its/moct/utic/server/MoctUticServerApplication.java

@@ -2,6 +2,7 @@ package com.utic.its.moct.utic.server;
 
 import com.its.common.spring.SpringUtils;
 import com.utic.its.common.repository.ApplicationRepository;
+import com.utic.its.moct.utic.server.config.HaClusterConfig;
 import com.utic.its.moct.utic.server.process.DbmsDataProcessService;
 import com.utic.its.moct.utic.server.process.PacketDataProcessService;
 import com.utic.its.moct.utic.server.repository.MoctUticServerRepository;
@@ -82,10 +83,13 @@ public class MoctUticServerApplication implements CommandLineRunner, Application
         ItsAsnCommServerService itsAsnCommServerService = SpringUtils.getBean(ItsAsnCommServerService.class);
         itsAsnCommServerService.run();
 
-        HaClusterMasterService haClusterMasterService = SpringUtils.getBean(HaClusterMasterService.class);
-        haClusterMasterService.start();
-        HaClusterSlaveService haClusterSlaveService = SpringUtils.getBean(HaClusterSlaveService.class);
-        haClusterSlaveService.start();
+        HaClusterConfig haClusterConfig = SpringUtils.getBean(HaClusterConfig.class);
+        if (haClusterConfig.isEnabled()) {
+            HaClusterMasterService haClusterMasterService = SpringUtils.getBean(HaClusterMasterService.class);
+            haClusterMasterService.start();
+            HaClusterSlaveService haClusterSlaveService = SpringUtils.getBean(HaClusterSlaveService.class);
+            haClusterSlaveService.start();
+        }
 
         Runtime.getRuntime().addShutdownHook(new Thread(() -> {
             log.error("Runtime thread: on shutdown hook.");
@@ -143,6 +147,15 @@ public class MoctUticServerApplication implements CommandLineRunner, Application
             } catch (Exception e) {
                 log.error("**    clusterMasterService.shutdown: {}", e.getMessage());
             }
+
+            try {
+                HaClusterSlaveService haClusterSlaveService = SpringUtils.getBean(HaClusterSlaveService.class);
+                if (haClusterSlaveService != null) {
+                    haClusterSlaveService.shutdown();
+                }
+            } catch (Exception e) {
+                log.error("**    haClusterSlaveService.shutdown: {}", e.getMessage());
+            }
             try {
                 SpringApplication.exit(SpringUtils.getApplicationContext());
                 System.exit(0);

+ 14 - 0
moct-utic-server/src/main/java/com/utic/its/moct/utic/server/config/HaClusterConfig.java

@@ -5,9 +5,23 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
+
 @Slf4j
 @Component
 @ConfigurationProperties(prefix = "ha-cluster")
 public class HaClusterConfig extends AbstractHaClusterConfig {
 
+    @PostConstruct
+    private void init() {
+        log.info("[  HaClusterConfig] -------------------------");
+        log.info("[  HaClusterConfig]               enabled: {}", isEnabled());
+        log.info("[  HaClusterConfig]            configFile: {}", getConfigFile());
+        log.info("[  HaClusterConfig]               logging: {}", isLogging());
+
+        log.info("[  HaClusterConfig]                master: {}", isMaster());
+        log.info("[  HaClusterConfig]              serverId: {}", getServerId());
+        log.info("[  HaClusterConfig]           syncSeconds: {}", getSyncSeconds());
+        log.info("[  HaClusterConfig]    ipAddress/syncPort: {}.{}", getIpAddress(), getSyncPort());
+    }
 }

+ 0 - 1
moct-utic-server/src/main/java/com/utic/its/moct/utic/server/config/SchedulingConfig.java

@@ -22,7 +22,6 @@ public class SchedulingConfig implements SchedulingConfigurer {
 
     @PostConstruct
     private void init() {
-        log.info("[{}] ------------", this.getClass().getSimpleName());
         if (this.poolSize == 0) {
             this.poolSize = 10;
         }

+ 2 - 0
moct-utic-server/src/main/java/com/utic/its/moct/utic/server/repository/MoctUticServerRepository.java

@@ -82,6 +82,7 @@ public class MoctUticServerRepository {
                 if (dto.getHeartbeatCycle() > 300) {
                     dto.setHeartbeatCycle(300);
                 }
+                dto.setServerId("1");
                 ApplicationRepository.CENTER.setCenter(dto);
                 return true;
             }
@@ -111,6 +112,7 @@ public class MoctUticServerRepository {
                     dto.setHeartbeatCycle(300);
                 }
                 dto.setIdx(idx++);
+                dto.setServerId("1");
                 ApplicationRepository.CENTER_MAP.put(dto.getCenterId(), dto);
                 ApplicationRepository.IPADDRESS_MAP.put(dto.getIpAddress(), dto);
             }

+ 36 - 0
moct-utic-server/src/main/java/com/utic/its/moct/utic/server/service/cluster/HaCenterDto.java

@@ -0,0 +1,36 @@
+package com.utic.its.moct.utic.server.service.cluster;
+
+import com.its.common.cluster.vo.HaClusterMessageData;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@Builder
+public class HaCenterDto implements HaClusterMessageData {
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public String getType() {
+        return "CENTER";
+    }
+
+    private String serverId;    // 서버 ID
+    private String centerId;    // 센터 ID
+
+    // NetState 정보
+    private int state;       // 상태 (0: 미연결, 1: 연결됨, 2: 로그인 대기, 3: 데이터 전송 중)
+    private long connectCount;
+    private long lastRecvTime;
+    private long lastSendTime;
+    private Date connectTime;
+    private Date disconnectTime;
+
+    // 교통정보 전송 정보
+    private long trafBaseTime;
+    private long trafSendTime;
+    private int trafTotalSends;
+    private String trafLastSendTime;
+
+}

+ 22 - 5
moct-utic-server/src/main/java/com/utic/its/moct/utic/server/service/cluster/HaClusterMasterService.java

@@ -1,11 +1,15 @@
 package com.utic.its.moct.utic.server.service.cluster;
 
-import com.its.common.cluster.master.AbstractHaClusterMasterService;
-import com.its.common.cluster.utils.HaClusterMessage;
+import com.its.common.cluster.service.AbstractHaClusterMasterService;
+import com.its.common.cluster.vo.HaClusterMessage;
+import com.its.common.cluster.vo.HaClusterMessageData;
 import com.utic.its.moct.utic.server.config.HaClusterConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 @Service
 public class HaClusterMasterService extends AbstractHaClusterMasterService {
@@ -15,13 +19,26 @@ public class HaClusterMasterService extends AbstractHaClusterMasterService {
     }
 
     @Override
-    public void election(boolean isMaster) {
-        // 마스터/슬래이브 여부
+    public void election(int serverId, boolean isMaster) {
+        // 서버 ID, 마스터/슬래이브 여부
+        log.info("HaClusterMasterService.election: serverId={}, isMaster={}", serverId, isMaster);
     }
 
     @Override
-    public void onClusterMessage(HaClusterMessage haClusterMessage) {
+    public void onClusterMessage(HaClusterMessage message) {
         // 슬래이브로 부터 수신되는 메시지 처리
+        List<HaCenterDto> infos = new ArrayList<>();
+        for (HaClusterMessageData info : message.getInfos()) {
+            if (info instanceof HaCenterDto) {
+                infos.add((HaCenterDto)info);
+            }
+        }
+
+        log.info("onClusterMessage: serverId = {}, master = {}, serverTime = {}, infos = {} EA.",
+                message.getServerId(), message.isMaster(), message.getServerTime(), infos.size());
+        for (HaCenterDto center : infos) {
+//            log.info("onClusterMessage: center={}", center);
+        }
     }
 
 }

+ 24 - 4
moct-utic-server/src/main/java/com/utic/its/moct/utic/server/service/cluster/HaClusterSlaveService.java

@@ -1,7 +1,8 @@
 package com.utic.its.moct.utic.server.service.cluster;
 
-import com.its.common.cluster.slave.AbstractHaClusterSlaveService;
-import com.its.common.cluster.utils.AbstractHaClusterMessageData;
+import com.its.common.cluster.service.AbstractHaClusterSlaveService;
+import com.its.common.cluster.vo.HaClusterMessageData;
+import com.utic.its.common.repository.ApplicationRepository;
 import com.utic.its.moct.utic.server.config.HaClusterConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -18,9 +19,28 @@ public class HaClusterSlaveService extends AbstractHaClusterSlaveService {
     }
 
     @Override
-    public List<AbstractHaClusterMessageData> getClusterMessageData() {
+    public List<HaClusterMessageData> getClusterMessageData() {
         // 마스터로 전송할 메시지를 설정
-        return new ArrayList<>();
+        List<HaClusterMessageData> result = new ArrayList<>();
+        ApplicationRepository.CENTER_MAP.forEach((key, center) -> {
+            HaCenterDto centerDto = HaCenterDto.builder()
+                    .serverId(center.getServerId())
+                    .centerId(center.getCenterId())
+                    .state(center.getNetState().getState())
+                    .connectCount(center.getNetState().getConnectCount())
+                    .lastRecvTime(center.getNetState().getLastRecvTime())
+                    .lastSendTime(center.getNetState().getLastSendTime())
+                    .connectTime(center.getNetState().getConnectTime())
+                    .disconnectTime(center.getNetState().getDisconnectTime())
+                    .trafBaseTime(center.getSendTraffic().getBaseTime())
+                    .trafSendTime(center.getSendTraffic().getSendTime())
+                    .trafTotalSends(center.getSendTraffic().getTotalSends())
+                    .trafLastSendTime(center.getSendTraffic().getLastSendTime())
+                    .build();
+
+            result.add(centerDto);
+        });
+        return result;
     }
 
 }

+ 1 - 0
utic-its-common/src/main/java/com/utic/its/common/dto/CenterDto.java

@@ -33,6 +33,7 @@ public class CenterDto implements Serializable {
     private static final long serialVersionUID = 1L;
 
     private int idx;
+    private String serverId;
     private String centerId;
     private String centerInfo;
     private String ipAddress;

+ 4 - 4
utic-its-common/src/main/java/com/utic/its/common/dto/NET.java

@@ -6,9 +6,9 @@ public class NET {
         throw new IllegalStateException("NET class");
     }
 
-    public final static int CLOSED = 0; /* 종료된 상태 */
-    public final static int LOGIN_WAIT = 1;      /* 최초 연결후 로그인 기다림 */
-    public final static int DATA_TRANS = 2;      /* data trans state */
-    public final static int TERMINATE = 2;
+    public static final int CLOSED = 0;         /* 종료된 상태 */
+    public static final int LOGIN_WAIT = 1;      /* 최초 연결후 로그인 기다림 */
+    public static final int DATA_TRANS = 2;      /* data trans state */
+    public static final int TERMINATE = 3;
 
 }

+ 2 - 0
utic-its-common/src/main/java/com/utic/its/common/entity/TbCenter.java

@@ -15,6 +15,7 @@ import java.util.HashMap;
 @AllArgsConstructor
 public class TbCenter {
 
+    private String serverId;
     private String centerId;
     private String centerInfo;
     private String ipAddress;
@@ -30,6 +31,7 @@ public class TbCenter {
     public CenterDto toDto() {
         return CenterDto.builder()
                 .idx(0)
+                .serverId(this.serverId)
                 .centerId(this.centerId)
                 .centerInfo(this.centerInfo)
                 .ipAddress(this.ipAddress)