Files
youlai-boot/src/main/java/com/youlai/boot/device/service/DeviceOnlineService.java
TongTongStudio 927332ad5d feat(device): 添加MQTT设备在线状态管理与Redis容错机制
- 集成Spring Integration MQTT与Eclipse Paho客户端
- 添加设备在线状态填充逻辑,支持批量查询心跳数据
- 优化Redis配置,使用Lazy初始化与通用序列化器
- 增加Redis异常处理与防重复提交Fail-Open机制
- 新增Redis设备模块常量与在线状态VO
- 完善MQTT与Redis集群连接配置
2026-08-08 20:31:29 +08:00

72 lines
2.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.youlai.boot.device.service;
import com.youlai.boot.device.model.vo.DeviceOnlineVO;
import java.util.List;
import java.util.Map;
/**
* 设备在线状态服务
* <p>
* 基于 Redis 记录设备在线/离线状态:
* <ul>
* <li>设备周期性上报心跳(经 MQTT 到达 {@code MqttMessageHandler}),每上报一次刷新 Redis key 的 TTL</li>
* <li>Redis key 使用带过期时间的 {@code SET key value EX timeout},超时未上报则 key 自动过期,即判定设备离线;</li>
* <li>查询时 key 存在 = 在线,不存在 = 离线。</li>
* </ul>
*
* @author TongTongStudio
* @since 2026/8/8
*/
public interface DeviceOnlineService {
/**
* 设备上报心跳,记录在线状态(刷新 Redis TTL
*
* @param sn 设备序列号
* @param ip 设备 IP可为空
*/
void reportHeartbeat(String sn, String ip);
/**
* 设备上报心跳,记录在线状态(刷新 Redis TTL
*
* @param sn 设备序列号
* @param ip 设备 IP可为空
* @param screenState 屏幕状态(1:亮屏;0:熄屏;null:未知),可为空
*/
void reportHeartbeat(String sn, String ip, Integer screenState);
/**
* 设备主动离线(如 MQTT Last Will / 关机通知)
*
* @param sn 设备序列号
*/
void markOffline(String sn);
/**
* 查询单个设备是否在线
*
* @param sn 设备序列号
* @return true=在线, false=离线
*/
boolean isOnline(String sn);
/**
* 获取单个设备在线状态信息
*
* @param sn 设备序列号
* @return 在线状态信息(离线时 online=0
*/
DeviceOnlineVO getOnlineInfo(String sn);
/**
* 批量查询设备在线状态
*
* @param sns 设备序列号集合
* @return key 为 SNvalue 为在线状态信息
*/
Map<String, DeviceOnlineVO> getOnlineStatusBySns(List<String> sns);
}