fix: 盐度设置,设备上线后,延时1.5秒后再下发。
This commit is contained in:
@@ -47,6 +47,9 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 设备数据处理器
|
||||
@@ -62,6 +65,17 @@ public class DeviceDataHandler {
|
||||
public static final String PENDING_SOLAR_SALINITY_KEY_PREFIX = "device:pending:solar:salinity:";
|
||||
private static final int DEVICE_TYPE_SOLAR_CONTROLLER = 3;
|
||||
|
||||
/**
|
||||
* 太阳能盐度补发专用调度线程池(daemon线程,避免阻止JVM退出)
|
||||
* 用于设备上线后延迟执行属性下发,确保设备已完成 MQTT 订阅
|
||||
*/
|
||||
private static final ScheduledExecutorService SOLAR_SALINITY_SCHEDULER =
|
||||
Executors.newSingleThreadScheduledExecutor(r -> {
|
||||
Thread t = new Thread(r, "solar-salinity-flush");
|
||||
t.setDaemon(true);
|
||||
return t;
|
||||
});
|
||||
|
||||
/**
|
||||
* TDengine 服务,用于存储设备时序数据
|
||||
*/
|
||||
@@ -960,7 +974,12 @@ public class DeviceDataHandler {
|
||||
log.info("[离线告警] 设备已上线,取消离线告警: {}", deviceName);
|
||||
}
|
||||
|
||||
flushPendingSolarSalinity(deviceName, "生命周期上线");
|
||||
// 异步延迟 1.5 秒补发缓存盐度:设备刚上线时尚未完成 MQTT 订阅,
|
||||
// 立即下发属性会失败,等待 1.5 秒让设备完成订阅后再下发
|
||||
SOLAR_SALINITY_SCHEDULER.schedule(
|
||||
() -> flushPendingSolarSalinity(deviceName, "生命周期上线"),
|
||||
1500L, TimeUnit.MILLISECONDS
|
||||
);
|
||||
|
||||
// 同步更新 Device.warnCode,清除离线和休眠标志位
|
||||
setDeviceWarnCodeBit(deviceName, DefineDeviceWarnCode.DeviceOffline, false);
|
||||
|
||||
Reference in New Issue
Block a user