feasure
xce 2026-01-16 02:19:52 +08:00
parent 0c520823aa
commit 6cfc8a1393
1 changed files with 12 additions and 0 deletions

View File

@ -6,6 +6,8 @@ import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@ -14,6 +16,7 @@ import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@ -46,6 +49,7 @@ public class MqttMessageHandler {
@Value("${spring.mqtt.default-topic:dtu/+/up,frontend/+/control/+}")
private String defaultTopic;
Logger log = LoggerFactory.getLogger(MqttMessageHandler.class);
/**
* +
*/
@ -245,6 +249,14 @@ public class MqttMessageHandler {
* @return MQTT
*/
public List<String> unsubscribeAllDevice(String clientId) {
// 适配低版本的Redis连接可用性校验替换掉isRunning()
try {
stringRedisTemplate.hasKey("test:connection");
} catch (Exception e) {
log.warn("Redis连接不可用取消订阅操作跳过{}", e.getMessage());
return Collections.emptyList();
}
// 步骤1查询该前端订阅的所有设备IDRedis中所有sub:*集合中包含该clientId的key
// 注意生产环境建议用scan代替keys避免阻塞Redis
Set<String> subKeys = stringRedisTemplate.keys("sub:*");