소스 검색

场景计算超时,需要中断当前执行任务,释放线程池中的任务线程,否则下个场景计算获取不到线程进行计算

dsx 2 년 전
부모
커밋
9c1015c232
1개의 변경된 파일5개의 추가작업 그리고 1개의 파일을 삭제
  1. 5 1
      src/main/java/com/fdkankan/modeling/receiver/RabbitMqListener.java

+ 5 - 1
src/main/java/com/fdkankan/modeling/receiver/RabbitMqListener.java

@@ -146,11 +146,12 @@ public class RabbitMqListener {
                 message.getResultReceiverMqName() : queueModelingPost;
         buildSceneResult.setResultQueueName(resultQueueName);
         ModelingBuildStatus status = null;
+        Future<ModelingBuildStatus> future = null;
         try {
             Map<String,Object> buildContext = new HashMap<>();
             //计算前准备
             preBuild(buildContext,message, buildLog);
-            Future<ModelingBuildStatus> future = SysConstants.executorService.submit(() -> {
+            future = SysConstants.executorService.submit(() -> {
                 try {
                     return buildScene(buildContext,message, buildSceneResult,buildLog);
                 } catch (Exception e) {
@@ -167,6 +168,9 @@ public class RabbitMqListener {
         } catch (TimeoutException ex) {
             log.error("服务实例:{} 构建异常:",SysConstants.hostName,ex);
             status = ModelingBuildStatus.OVERTIME;
+            log.info("释放线程");
+            //场景计算超时,需要中断当前执行任务,释放线程池中的任务线程,否则下个场景计算获取不到线程进行计算
+            future.cancel(true);
         } catch (BuildException e){
             status = e.getBuildStatus();
         } catch(Exception e) {