diff --git a/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java b/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java index 3fc209e..97f43c6 100644 --- a/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java +++ b/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java @@ -23,9 +23,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.SmartLifecycle; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; -import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.RedisCallback; -import org.springframework.data.redis.core.ScanOptions; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.stereotype.Component; @@ -740,48 +738,10 @@ public class MqttMessageHandler implements SmartLifecycle { log.error("【全量取消】Redis批量删除失败", e); throw new RuntimeException("全量取消订阅失败:" + e.getMessage()); } - - // 6. 清理该前端持有的分布式锁(精准扫描,提升效率) - Set lockKeys = scanRedisKeys("lock:*:" + clientId); - if (lockKeys != null && !lockKeys.isEmpty()) { - stringRedisTemplate.delete(lockKeys); // 批量删除锁,无需遍历 - log.info("【全量取消】清理前端{}持有的{}个分布式锁", clientId, lockKeys.size()); - } - log.info("【全量取消】前端{}成功取消{}个设备的订阅", clientId, deviceSet.size()); return frontendTopics; } - // 保留原有scanRedisKeys方法(兼容JDK 8) - private Set scanRedisKeys(String pattern) { - Set keys = new HashSet<>(); - try { - stringRedisTemplate.execute(new RedisCallback() { - @Override - public Void doInRedis(RedisConnection connection) throws DataAccessException { - RedisSerializer serializer = stringRedisTemplate.getStringSerializer(); - ScanOptions scanOptions = ScanOptions.scanOptions() - .match(pattern) - .count(100) - .build(); - Cursor cursor = connection.scan(scanOptions); - while (cursor.hasNext()) { - byte[] keyBytes = cursor.next(); - String key = serializer.deserialize(keyBytes); - if (key != null) { - keys.add(key); - } - } - cursor.close(); - return null; - } - }); - } catch (Exception e) { - log.error("Redis Scan查询失败,pattern={}", pattern, e); - } - return keys; - } - /** * 实际业务中:查询指定用户名下的所有设备ID(需替换为你的DAO/Service逻辑) * @return 设备ID列表