Jelajahi Sumber

优化弹性伸缩关闭判断

lyhzzz 1 tahun lalu
induk
melakukan
47b42f05ae

+ 9 - 0
src/main/java/com/fdkankan/mqcontroller/task/TaskService.java

@@ -320,6 +320,8 @@ public class TaskService {
         log.info("启动中的弹性伸缩数量为:{}",mqEcsList.size());
         HashMap<String,MqQueueConfig> queueMap = queueConfigService.getQueueMap();
         HashMap<Integer,MqScalingConfig> scalingMap = mqScalingConfigService.getIdMap();
+
+
         for (MqEcs mqEcs : mqEcsList) {
             if(StringUtils.isBlank(mqEcs.getEcsName()) || StringUtils.isBlank(mqEcs.getQueueName())){
                 continue;
@@ -333,6 +335,13 @@ public class TaskService {
             long count  = between/60;
             boolean flag = delList.stream().anyMatch(e -> e.getMqEcs().getEcsName().equals(mqEcs.getEcsName()));
             if(between >= mqQueueConfig.getStopScalingTime() + 60 * count && !flag){
+                List<MqSendLog> mqSendLogs = configLogsMap.get(mqQueueConfig.getId());
+                MqMsg mqMsg = mqMsgMap.get(mqEcs.getQueueName());
+                Integer notModelingCount = mqMsg.getConsumers() - mqMsg.getMessages_unacknowledged() - mqMsg.getMessages_ready();
+                if(mqSendLogs.size() - notModelingCount + mqQueueConfig.getScalingThreshold() >0 ){
+                    log.info("待计算数量:{}大于空闲服务数量:{},不关闭",mqSendLogs.size(),notModelingCount);
+                    continue;
+                }
                 log.info("checkDelEcs-实例开启{}时间大于{}分钟,开始关闭:{}",between,mqQueueConfig.getStopScalingTime(),mqEcs.getEcsName());
                 DelEcsVo vo = new DelEcsVo(mqEcs,scalingMap.get(mqQueueConfig.getScalingConfigId()),null);
                 delList.offer(vo);