Procházet zdrojové kódy

evps data update config add: insert-comm-hist, check-event-time-gap

shjung před 1 týdnem
rodič
revize
f498d98857

+ 1 - 0
evps-comm-server/src/main/java/com/evps/comm/server/config/ApplicationConfig.java

@@ -26,6 +26,7 @@ public class ApplicationConfig extends NettyServerConfig {
     private int autoEndMinutes = 20;
     private int lastCommTimeoutSeconds = 60;
     private boolean insertCommHist = false;
+    private boolean checkEventTimeGap = true;
 
     private int maxConnection = 0;
     private int packetWorkers = 0;

+ 2 - 1
evps-comm-server/src/main/java/com/evps/comm/server/process/dbms/DbmsDataProcess.java

@@ -112,15 +112,16 @@ public class DbmsDataProcess {
                     //  지역센터에서 종료이벤트를 중복으로 전송하는 경우가 는 경우, 또는 멀티스레드 처리 중에 시간의 역전.
                     // 종료 이벤트 인 경우 메모리에서 삭제 한 후에 이벤트(종료) 이벤트를 저장한다.
                     boolean insData = true;
+                    result = 0;
                     KafkaEvpsEventDto event = (KafkaEvpsEventDto)data.getData();
                     if (event.getEventCd() < KafkaEvpsEventDto.EVPS_EVENT_SERVICE_END) {
                         KafkaEvpsServiceDto service = ApplicationRepository.getService(event.getServiceId());
                         if (service == null) {
                             insData = false;
-                            result = 0;
                             log.warn("[{}]. DBMS_DATA_INS_EVENT: EVPS service has already ended. {}", center.getLogKey(), event);
                         }
                     }
+
                     if (insData) {
                         try {
                             // 현재 서비스 이벤트 정보에서 종료 후 다른 이벤트가 처리되지 않도록 한다.

+ 18 - 6
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsEvent.java

@@ -1,5 +1,6 @@
 package com.evps.comm.server.xnet.server.process.response;
 
+import com.evps.comm.server.config.ApplicationConfig;
 import com.evps.comm.server.kafka.KafkaProducerService;
 import com.evps.comm.server.process.dbms.DbmsData;
 import com.evps.comm.server.process.dbms.DbmsDataProcess;
@@ -30,6 +31,7 @@ distance        잔여 거리         Integer      4   (단위: m), 목적지 
 public class EvpsEvent implements EvpsCommResponse {
     private final DbmsDataProcess dbmsDataProcess;
     private final KafkaProducerService kafkaProducerService;
+    private final ApplicationConfig config;
 
     @Override
     public boolean response(RecvPacketDto packet) {
@@ -86,12 +88,6 @@ public class EvpsEvent implements EvpsCommResponse {
             log.info("[{}]. EvpsEvent.response: Service Id: {}, {}", center.getLogKey(), packet.getPacket().getServiceId(), eventDto);
         }
 
-        // kafka 전송
-        this.kafkaProducerService.sendEvpsEventTopic(eventDto);
-
-        // 이벤트 정보 입력(차량 이동)
-        this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_INS_EVENT, center, eventDto));
-
         KafkaEvpsServiceDto service = ApplicationRepository.getService(eventDto.getServiceId());
         if (service == null) {
             log.error("[{}]. EvpsEvent.response: Service Id: {}, Not Found Service Information.", center.getLogKey(), eventDto.getServiceId());
@@ -103,6 +99,22 @@ public class EvpsEvent implements EvpsCommResponse {
             service.setServiceDist(eventDto.getRemDist());
             service.updateLastCommTime();
         }
+
+        // 경남청 이벤트가 1초에 수십건씩 들어오는게 있어서 여기서 시간을 계산해서 처리함
+        if (service != null && this.config.isCheckEventTimeGap()) {
+            if (!service.isValidEvent()) {
+                // 이전 이벤트가 1초 이내에 들어오면 무시
+                return true;
+            }
+            service.updateLastEventTime();
+        }
+
+        // kafka 전송
+        this.kafkaProducerService.sendEvpsEventTopic(eventDto);
+
+        // 이벤트 정보 입력(차량 이동)
+        this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_INS_EVENT, center, eventDto));
+
         return true;
     }
 }

+ 3 - 1
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/work/DataPacketProcess.java

@@ -1,5 +1,6 @@
 package com.evps.comm.server.xnet.server.process.work;
 
+import com.evps.comm.server.config.ApplicationConfig;
 import com.evps.comm.server.config.ThreadPoolInitializer;
 import com.evps.comm.server.kafka.KafkaProducerService;
 import com.evps.comm.server.process.dbms.DbmsDataProcess;
@@ -29,6 +30,7 @@ public class DataPacketProcess {
     private final LinkedBlockingQueue<RecvPacketDto> dataQueue = new LinkedBlockingQueue<>(2000);
     private final ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);
 
+    private final ApplicationConfig config;
     private final DataPacketAsyncTask asyncTask;
     private final DbmsDataProcess dbmsDataProcess;
     private final KafkaProducerService kafkaProducerService;
@@ -76,7 +78,7 @@ public class DataPacketProcess {
                     response = new EvpsSignal(this.dbmsDataProcess, this.kafkaProducerService);
                     break;
                 case EVPS_EVENT:
-                    response = new EvpsEvent(this.dbmsDataProcess, this.kafkaProducerService);
+                    response = new EvpsEvent(this.dbmsDataProcess, this.kafkaProducerService, this.config);
                     break;
                 case EVPS_SERVICE_END:
                     response = new EvpsServiceEnd(this.dbmsDataProcess, this.kafkaProducerService);

+ 1 - 0
evps-comm-server/src/main/resources/application.yml

@@ -52,6 +52,7 @@ application:
   auto-end-minutes: 20
   last-comm-timeout-seconds: 60
   insert-comm-hist: false
+  check-event-time-gap: true
   backlog: 0
   worker-threads: 0
   rcv-buf: 0

+ 9 - 1
evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsServiceDto.java

@@ -96,12 +96,20 @@ public class KafkaEvpsServiceDto implements KafkaEvpsData {
 
     @JsonIgnore
     private long lastCommTime;
+    @JsonIgnore
+    private long lastEventTime;
+
     @JsonIgnore
     private Object centerObj;
 
     public void updateLastCommTime() {
         this.lastCommTime = System.currentTimeMillis();
     }
+    public void updateLastEventTime() {
+        this.lastEventTime = System.currentTimeMillis();
+    }
+    public boolean isValidEvent() {
+        return (System.currentTimeMillis() - this.lastEventTime) > 900;
+    }
 
 }
-

+ 2 - 2
evps-consumer/src/main/resources/logback-spring.xml

@@ -5,8 +5,8 @@
     <property name="PROJECT_NAME"    value="evps-consumer"/>
     <property name="ROOT_LOG_LEVEL"  value="DEBUG"/>
     <property name="LOG_CHARSET"     value="UTF-8" />
-    <property name="LOG_PATH"        value="${user.home}/logs/evps-comm-server/"/>
-    <property name="LOG_BACKUP_PATH" value="${user.home}/logs/evps-comm-server/backup/"/>
+    <property name="LOG_PATH"        value="${user.home}/logs/"/>
+    <property name="LOG_BACKUP_PATH" value="${user.home}/logs/backup/"/>
 
     <property name="LOG_FILE_NAME"         value="${PROJECT_NAME}.log"/>
     <property name="LOG_FILE_NAME_ERROR"   value="${PROJECT_NAME}.err.log"/>