From 9b7ec5725b5dd923a543d9702f2cd4b126ad8419 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Tue, 6 Aug 2024 10:04:37 +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 | 25 +++++++++++++------ .../service/impl/CsDeviceServiceImpl.java | 2 +- 2 files changed, 19 insertions(+), 8 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 7f0677b..e09ceb3 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 @@ -86,19 +86,30 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene record.setOfflineTime(LocalDateTime.now()); onlineLogsService.updateById(record); try { - //装置掉线等待10分钟,发起接入请求 String version = csTopicService.getVersion(nDid); - log.info("装置掉线10分钟发送接入请求,接入失败则进入定时接入任务"); - Thread.sleep(600000); + //装置没有心跳,则立马发起接入请求 + log.info("装置掉线3分钟发送接入请求"); csDeviceService.devAccess(nDid,version); - //接入再次失败,则定时发起接入请求 - Thread.sleep(1000); - Integer status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); + Integer status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); + if (Objects.equals(status,AccessEnum.ONLINE.getCode())){ + throw new BusinessException(CommonResponseEnum.SUCCESS); + } + //心跳断连立马发起接入失败后,1分钟再次发起请求,请求3次 + for (int i = 1; i < 4; i++) { + //接入再次失败,则定时发起接入请求 + Thread.sleep(1000 * 60); + log.info("装置定时1分钟发送接入请求,第" + i + "次尝试"); + csDeviceService.devAccess(nDid,version); + status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); + if (Objects.equals(status,AccessEnum.ONLINE.getCode())){ + break; + } + } if (!Objects.isNull(status) && Objects.equals(status,AccessEnum.OFFLINE.getCode())){ final int[] mid = {2}; ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); ScheduledFuture runnableFuture = executor.scheduleAtFixedRate(() -> { - log.info("定时发送接入请求..."); + log.info("装置10分钟定时发送接入请求..."); csDeviceService.devAccessMid(nDid,version, mid[0]); Integer status2 = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); if (Objects.equals(status2,AccessEnum.ONLINE.getCode())){ diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java index 3a77bfc..e86080c 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java @@ -174,7 +174,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService { logDto.setResult(1); Object model = null; try { - Thread.sleep(1500); + Thread.sleep(3000); String key = AppRedisKey.LINE + nDid; model = redisUtil.getObjectByKey(key); if (Objects.isNull(model)){