From d3a9d08b94eaf49ac973ad149c17c32fd1d4164f Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Mon, 12 Aug 2024 17:07:38 +0800 Subject: [PATCH] =?UTF-8?q?#=E5=AE=9A=E6=97=B6=E5=88=B7=E6=96=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BB=BB=E5=8A=A1=E8=BF=90=E8=A1=8C=E5=A0=B5=E5=A1=9E?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operation/monitor/impl/MonitorServiceImpl.java | 62 +++++++++++----------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/monitor/impl/MonitorServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/monitor/impl/MonitorServiceImpl.java index b7a2a03..6a39591 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/monitor/impl/MonitorServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/monitor/impl/MonitorServiceImpl.java @@ -85,8 +85,9 @@ public class MonitorServiceImpl implements MonitorService { private final IAnalyseDataSearchClient analyseDataSearchClient; - private static final ExecutorService pool = new ThreadPoolExecutor(10, 10, 60L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(256), new ThreadFactoryBuilder().setNameFormat("load-monitoring-pool-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy()); + private static final ExecutorService pool = new ThreadPoolExecutor(20, 20, 2L, TimeUnit.MINUTES, new LinkedBlockingQueue<>(256), new ThreadFactoryBuilder().setNameFormat("load-monitoring-pool-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy()); + private static boolean isSendMail = true; @Value("${hzims.equipment.emInfo.emInfoList}") public String device_cache_final; @@ -232,18 +233,19 @@ public class MonitorServiceImpl implements MonitorService { try { // 等待所有线程执行完成(至多等待三秒,超过三秒任务认为线程发生阻塞) boolean flag = countDownLatch.await(3,TimeUnit.SECONDS); - if(!flag){ + if(!flag && isSendMail){ log.error("实时数据调度发生阻塞 : {}" , DateUtil.format(new Date(),DateUtil.PATTERN_DATETIME)); + isSendMail = false; // 发生邮件 this.sendMonthReport("实时数据运行堵塞"); + }else if(flag){ + // redis 存储 + redisTemplate.opsForValue().set(real_cache_final,JSONObject.toJSONString(valueMap)); + redisTemplate.opsForValue().set(real_gather_cache_final,JSONObject.toJSONString(keyMap)); } } catch (InterruptedException e) { - e.printStackTrace(); Thread.currentThread().interrupt(); } - // redis 存储 - redisTemplate.opsForValue().set(real_cache_final,JSONObject.toJSONString(valueMap)); - redisTemplate.opsForValue().set(real_gather_cache_final,JSONObject.toJSONString(keyMap)); } /** @@ -310,44 +312,40 @@ public class MonitorServiceImpl implements MonitorService { // 切割数据遍历 for(Map> item : limit){ // 提交线程任务 - pool.submit(()->{ - try{ - item.forEach((key,value)->{ - RealStationVo realStation = new RealStationVo(); - // 设备信息 - List devices = this.monitorRealDevice(value,realTimeData); - // 设备状态 - this.deviceStatus(devices,deviceClassifyMap); - realStation.setDeviceList(devices.stream().sorted(Comparator.comparing(RealDeviceVo::getDeviceName)).collect(Collectors.toList())); - // 站点基础信息: 编码、名称、限制水位、服务类型、机构、排序 - this.stationBaseInfo(stations.stream().filter(station->key.equals(station.getCode())).findFirst(),sorts,realStation); - // 站点总功率计算 - this.stationActivePower(devices,realStation); - // 站点铃铛、数据中断状态 - this.stationStatus(aborts,bells,realStation); - realStations.add(realStation); - }); - countDownLatch.countDown(); - }catch (Exception e){ - countDownLatch.countDown(); - Thread.currentThread().interrupt(); - } + pool.execute(()->{ + item.forEach((key,value)->{ + RealStationVo realStation = new RealStationVo(); + // 设备信息 + List devices = this.monitorRealDevice(value,realTimeData); + // 设备状态 + this.deviceStatus(devices,deviceClassifyMap); + realStation.setDeviceList(devices.stream().sorted(Comparator.comparing(RealDeviceVo::getDeviceName)).collect(Collectors.toList())); + // 站点基础信息: 编码、名称、限制水位、服务类型、机构、排序 + this.stationBaseInfo(stations.stream().filter(station->key.equals(station.getCode())).findFirst(),sorts,realStation); + // 站点总功率计算 + this.stationActivePower(devices,realStation); + // 站点铃铛、数据中断状态 + this.stationStatus(aborts,bells,realStation); + realStations.add(realStation); + }); + countDownLatch.countDown(); }); } // 等待所有线程执行完成 try { // 等待所有线程执行完成(至多等待二秒,超过二秒任务认为线程发生阻塞) - boolean flag = countDownLatch.await(2,TimeUnit.SECONDS); - if(!flag){ + boolean flag = countDownLatch.await(3,TimeUnit.SECONDS); + if(!flag && isSendMail){ log.error("集中监控数据调度发生阻塞 : {}" , DateUtil.format(new Date(),DateUtil.PATTERN_DATETIME)); + isSendMail = false; // 发生邮件 this.sendMonthReport("集中监控数据运行堵塞"); + }else if(flag){ + redisTemplate.opsForValue().set(moniter_station_cache_final, realStations); } } catch (InterruptedException e) { - e.printStackTrace(); Thread.currentThread().interrupt(); } - redisTemplate.opsForValue().set(moniter_station_cache_final, realStations); } /**