This commit is contained in:
xy
2024-08-21 16:38:13 +08:00
parent ed21efeda1
commit 19cc757255

View File

@@ -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 {
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);
}
}