Kaynağa Gözat

refactor: 联调优化

zhanghaijun 3 yıl önce
ebeveyn
işleme
e47822eaa3

BIN
docs/资源模型数据库定义表20230809.xlsx


+ 45 - 0
src/main/java/com/cec/plugins/config/AsyncConfig.java

@@ -0,0 +1,45 @@
+package com.cec.plugins.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.AsyncConfigurer;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.lang.reflect.Method;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/8/20 10:25
+ * @description 异步执行配置信息
+ */
+@Slf4j
+@EnableAsync
+@Configuration
+public class AsyncConfig implements AsyncConfigurer {
+    @Override
+    public Executor getAsyncExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(8); // 核心线程数
+        executor.setMaxPoolSize(32);  // 最大线程数
+        executor.setQueueCapacity(1000); // 队列大小
+        executor.setKeepAliveSeconds(600); // 线程最大空闲时间
+        // 指定用于新创建的线程名称的前缀。
+        executor.setThreadNamePrefix("async-cec-");
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        // 这一步千万不能忘了,否则报错: java.lang.IllegalStateException: ThreadPoolTaskExecutor not initialized
+        executor.initialize();
+        return executor;
+    }
+
+    /** 异步执行异常全局处理 */
+    @Override
+    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
+        return (Throwable ex, Method method, Object... params) -> {
+            log.error("glob async exception: {},method: {}, params: {}", ex.getMessage(), method.getName(), params);
+        };
+    }
+}

+ 2 - 3
src/main/java/com/cec/plugins/config/RedissonConfig.java

@@ -1,12 +1,11 @@
 package com.cec.plugins.config;
 
 import cn.hutool.core.util.StrUtil;
-import com.cec.plugins.config.properties.RedisProperties;
 import com.cec.plugins.config.properties.ProjectProperties;
+import com.cec.plugins.config.properties.RedisProperties;
 import lombok.RequiredArgsConstructor;
 import org.redisson.Redisson;
 import org.redisson.api.RedissonClient;
-import org.redisson.codec.JsonJacksonCodec;
 import org.redisson.config.Config;
 import org.redisson.config.SingleServerConfig;
 import org.redisson.config.TransportMode;
@@ -33,7 +32,7 @@ public class RedissonConfig {
     public RedissonClient redissonResourceClient() {
         Config config = new Config();
         config.setTransportMode(TransportMode.NIO);
-        config.setCodec(new JsonJacksonCodec());
+        config.setCodec(new org.redisson.client.codec.StringCodec());
         SingleServerConfig singleServerConfig = config.useSingleServer();
         RedisProperties.RedisModel source = property.getSource();
         singleServerConfig

+ 2 - 0
src/main/java/com/cec/plugins/config/RunnerRegister.java

@@ -21,6 +21,8 @@ public class RunnerRegister implements ApplicationRunner {
 
     @Override
     public void run(ApplicationArguments args) {
+        // 初始化
+        taskService.serverInit();
         // 注册
         taskService.register();
         // 心跳

+ 15 - 7
src/main/java/com/cec/plugins/controller/DemoController.java

@@ -1,7 +1,9 @@
 package com.cec.plugins.controller;
 
+import cn.hutool.json.JSONUtil;
 import com.cec.plugins.domain.ResultData;
 import com.cec.plugins.domain.reported.RegistrationDto;
+import com.cec.plugins.domain.reported.ReportedData;
 import com.cec.plugins.domain.reported.ServiceDto;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
@@ -12,26 +14,32 @@ import org.springframework.web.bind.annotation.RestController;
 
 /**
  * @author zhanghaijun
- * @version 1.0
  * @date 2023/8/15 23:07
- * @description [一句话描述该类的功能]
+ * @description 模拟综管平台的接受接口
  */
 @Slf4j
 @RestController
-@RequestMapping("/api/v1")
+@RequestMapping("")
 public class DemoController {
 
     /** 模拟注册接口 */
-    @PostMapping("/serviceRegistration")
+    @PostMapping("/api/v1/serviceRegistration")
     public ResultData registration(@RequestBody @Validated RegistrationDto dto) {
-        log.info("模拟注册接口,注册成功,注册参数:{}", dto);
+        log.info("模拟注册接口,注册成功,注册参数:{}", JSONUtil.toJsonStr(dto));
         return ResultData.success();
     }
 
     /** 模拟心跳接口 */
-    @PostMapping("/serviceState")
+    @PostMapping("/api/v1/serviceState")
     public ResultData serviceState(@RequestBody @Validated ServiceDto dto) {
-        log.info("模拟心跳接口,接受心跳成功,注册参数:{}", dto);
+        log.info("模拟心跳接口,接受心跳成功,注册参数:{}", JSONUtil.toJsonStr(dto));
+        return ResultData.success();
+    }
+
+    /** 执行结果上报接口 */
+    @PostMapping("/config/api/v1/receivetaskstatus")
+    public ResultData receivetaskstatus(@RequestBody @Validated ReportedData dto) {
+        log.info("模拟上报接口,上报接口成功,注册参数:{}", JSONUtil.toJsonStr(dto));
         return ResultData.success();
     }
 }

+ 1 - 2
src/main/java/com/cec/plugins/core/retry/RetryTemplate.java

@@ -43,9 +43,8 @@ public abstract class RetryTemplate {
                 return handle;
             } catch (Exception exception) {
                 retryCount++;
-                log.warn("Handling failure, The maximum number of attempts is {}, The trial condition is {}", maxRetries, exceptionClass.getName());
                 if (exceptionClass.isInstance(exception)) {
-                    log.warn("Handling failure, Retrying..., The number of attempts is {}", retryCount);
+                    log.warn("Handling failure, 并开始重试, retryCount is {} ,maxRetries is {}, exception is {}", retryCount, maxRetries, exceptionClass.getName());
                     try {
                         Thread.sleep(retryDelayMillis);
                     } catch (InterruptedException ex) {

+ 47 - 0
src/main/java/com/cec/plugins/enumerate/EstimateEnum.java

@@ -0,0 +1,47 @@
+package com.cec.plugins.enumerate;
+
+import cn.hutool.core.util.StrUtil;
+import lombok.Getter;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/8/20 10:55
+ * @description 评估模型数据库
+ */
+@Getter
+public enum EstimateEnum {
+
+    CATS_SendFlow("CATS_SendFlow", "网络安全运行状态评估", "中心ATS发送网络流量"),
+    CATS_RecFlow("CATS_RecFlow", "网络安全运行状态评估", "中心ATS接收网络流量"),
+    CISCS_SendFlow("CISCS_SendFlow", "网络安全运行状态评估", "中心ISCS发送网络流量"),
+    CISCS_RecFlow("CISCS_RecFlow", "网络安全运行状态评估", "中心ISCS接收网络流量"),
+    CVOBC_SendFlow("CVOBC_SendFlow", "网络安全运行状态评估", "车载驾驶仿真系统发送网络流量"),
+    CVOBC_RecFlow("CVOBC_RecFlow", "网络安全运行状态评估", "车载驾驶仿真系统接收网络流量"),
+    CVOBC_EBLocationMiss("CVOBC_EBLocationMiss", "系统异常运行状态评估", "列车紧急制动-定位丢失"),
+    CVOBC_EBCommMiss("CVOBC_EBCommMiss", "系统异常运行状态评估", "列车紧急制动-车地通信"),
+    CATS_MonState("CATS_MonState", "系统异常运行状态评估", "ATS监控状态"),
+    CATS_DR("CATS_DR", "安防及任务结果评估", "中心ATS时刻表兑现率"),
+    CATS_OTD("CATS_OTD", "安防及任务结果评估", "中心ATS时刻表准点率");
+
+    private final String key;
+    private final String group;
+    private final String describe;
+
+    EstimateEnum(String key, String group, String describe) {
+        this.key = key;
+        this.group = group;
+        this.describe = describe;
+    }
+
+    public static EstimateEnum findEstimateEnum(String key) {
+        if (StrUtil.isBlank(key)) {
+            return null;
+        }
+        for (EstimateEnum value : EstimateEnum.values()) {
+            if (StrUtil.equalsAnyIgnoreCase(key, value.getKey())) {
+                return value;
+            }
+        }
+        return null;
+    }
+}

+ 5 - 0
src/main/java/com/cec/plugins/service/TaskService.java

@@ -50,6 +50,11 @@ public class TaskService {
         return ResultData.success();
     }
 
+    @Async
+    public void serverInit() {
+        redisClientSource.setCacheObject(TaskEnum.TaskInstanceId.getKey(), "");
+    }
+
     /** 注册服务 */
     @Async
     public void register() {

+ 2 - 2
src/main/java/com/cec/plugins/utils/HttpUtils.java

@@ -44,7 +44,7 @@ public class HttpUtils {
     /** POST请求 */
     public ResultData post(String url, Object body, String content) {
         String bodyStr = JSONUtil.toJsonStr(body);
-        log.error("HttpUtils POST. url={},bodyStr={}", url, bodyStr);
+        log.info("HttpUtils POST. url={},bodyStr={}", url, bodyStr);
         HttpResponse response = HttpRequest.post(url).body(bodyStr, StrUtil.blankToDefault(content, CONTENT_TYPE_JSON)).timeout(TIME_OUT_MILLISECONDS).execute();
         return HandleResponse(url, response);
     }
@@ -54,7 +54,7 @@ public class HttpUtils {
             log.error("HttpUtils 响应失败. url={},response={}", url, response.getStatus());
             return ResultData.fail("http响应失败,状态码:" + response.getStatus());
         }
-        log.error("HttpUtils 响应成功. url={},result={}", url, response.body());
+        log.info("HttpUtils 响应成功. url={},result={}", url, response.body());
         JSONObject result = JSONUtil.parseObj(response.body());
         return new ResultData(Convert.toInt(result.get("resp_code"), ResultData.CODE_SUCCESS), Convert.toStr(result.get("resp_msg"), ""), Convert.toLong(result.get("time_stamp"), 0L));
     }

+ 4 - 2
src/main/resources/application.yml

@@ -8,6 +8,8 @@ server:
 logging:
   level:
     org.springframework: warn
+    org.hibernate.validator: warn
+    org.apache: warn
     com.cec: info
   config: classpath:logback.xml
 
@@ -32,5 +34,5 @@ project:
     ip-address: 127.0.0.1
     port: ${server.port}
   simulation:
-    retries: 3
-    delay-millis: 1000
+    retries: 20
+    delay-millis: 500

+ 2 - 1
src/main/resources/logback.xml

@@ -3,7 +3,8 @@
     <!-- 日志存放路径 -->
     <property name="log.path" value="logs"/>
     <!-- 日志输出格式 -->
-    <property name="console.log.pattern" value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
+    <!-- <property name="console.log.pattern" value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>-->
+    <property name="console.log.pattern" value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) - %msg%n"/>
     <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
 
     <!-- 控制台输出 -->