From 19cc757255463a3702b3418badc3f522bb2f26d2 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Wed, 21 Aug 2024 16:38:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/RedisKeyExpirationListener.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java b/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java index b533ec9..37be393 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java @@ -50,10 +50,10 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene } // 最大尝试次数 - private static final int MAX_ATTEMPTS = 3; + private static final int MAX_ATTEMPTS = 4; // 当前尝试次数 - private static int attemptCount = 0; + private static int attemptCount = 1; /** * 针对redis数据失效事件,进行数据处理 @@ -76,8 +76,9 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene //主任务 private void executeMainTask(ScheduledExecutorService scheduler, String nDid, String version) { + System.out.println("正在执行主任务..."); DeviceLogDTO logDto = new DeviceLogDTO(); - logDto.setUserName("装置掉线触发"); + logDto.setUserName("装置失去心跳触发"); logDto.setOperate(nDid + "重连"); //装置下线 csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode()); @@ -85,11 +86,10 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene csDeviceService.devAccessAskTemplate(nDid,version,1); Integer status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); if (Objects.equals(status,AccessEnum.ONLINE.getCode())){ - scheduler.shutdown(); logDto.setResult(1); + scheduler.shutdown(); } else { logDto.setResult(0); - logDto.setFailReason("心跳结束重连失败,启动第一个定时任务"); startScheduledTask(scheduler,nDid,version); } csLogsFeignClient.addUserLog(logDto); @@ -99,30 +99,31 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene private void startScheduledTask(ScheduledExecutorService scheduler, String nDid, String version) { ScheduledFuture future = scheduler.scheduleAtFixedRate(() -> { DeviceLogDTO logDto = new DeviceLogDTO(); - logDto.setUserName("装置掉线第一次定时任务"); + logDto.setOperate(nDid + "第一阶段重连定时任务"); if (attemptCount < MAX_ATTEMPTS) { + System.out.println(nDid + "执行第一阶段重连定时任务,第 " + attemptCount + " 次尝试..."); attemptCount++; - logDto.setOperate(nDid + "执行第一次定时任务,第 " + attemptCount + " 次尝试..."); csDeviceService.devAccessAskTemplate(nDid,version,attemptCount); int status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); if (Objects.equals(status,AccessEnum.ONLINE.getCode())){ logDto.setResult(1); scheduler.shutdown(); - } else { - logDto.setResult(0); - startSecondScheduledTask(scheduler,nDid,version); } + } else { + attemptCount++; + logDto.setResult(0); + startSecondScheduledTask(scheduler,nDid,version); } csLogsFeignClient.addUserLog(logDto); - }, 0, 60, TimeUnit.SECONDS); + }, 0, 5, TimeUnit.SECONDS); } //启动第二个定时任务 private void startSecondScheduledTask(ScheduledExecutorService scheduler, String nDid, String version) { ScheduledFuture future = scheduler.scheduleAtFixedRate(() -> { + System.out.println(nDid + "执行第二阶段重连定时任务..."); DeviceLogDTO logDto = new DeviceLogDTO(); - logDto.setUserName("装置掉线第二次定时任务"); - logDto.setOperate(nDid + "执行第二次定时任务"); + logDto.setOperate(nDid + "第二阶段重连定时任务"); csDeviceService.devAccessAskTemplate(nDid,version,attemptCount++); int status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); if (Objects.equals(status,AccessEnum.ONLINE.getCode())) { @@ -132,6 +133,6 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene logDto.setResult(0); } csLogsFeignClient.addUserLog(logDto); - }, 0, 600, TimeUnit.SECONDS); + }, 0, 10, TimeUnit.SECONDS); } }