关闭旧实例

feasure
xce 2026-01-16 18:44:03 +08:00
parent bc24edef61
commit dee84cfe54
2 changed files with 13 additions and 5 deletions

View File

@ -218,11 +218,17 @@ public class MqttConfig {
// 新增应用关闭时优雅断开MQTT连接避免连接泄漏JDK 8兼容 // 新增应用关闭时优雅断开MQTT连接避免连接泄漏JDK 8兼容
@PreDestroy @PreDestroy
public void destroyMqttClient() { public void destroyMqttClient() {
if (mqttClientInstance != null && mqttClientInstance.isConnected()) { // 最小改动:补充判空+close+置空,保留原有逻辑和注释
if (mqttClientInstance != null) {
try { try {
mqttClientInstance.disconnect(); if (mqttClientInstance.isConnected()) {
mqttClientInstance.disconnect();
log.info("【MQTT连接关闭】客户端已优雅断开连接");
}
// 新增:关闭实例释放资源
mqttClientInstance.close(); mqttClientInstance.close();
log.info("【MQTT连接关闭】客户端已优雅断开连接"); // 新增置空实例加速GC
mqttClientInstance = null;
} catch (MqttException e) { } catch (MqttException e) {
log.error("【MQTT连接关闭异常】" + e.getMessage(), e); log.error("【MQTT连接关闭异常】" + e.getMessage(), e);
} }

View File

@ -448,14 +448,16 @@ public class MqttMessageHandler implements SmartLifecycle {
currentReconnectCount++; currentReconnectCount++;
log.info("【MQTT重连】第{}次尝试重连(间隔{}秒)", currentReconnectCount, reconnectInterval); log.info("【MQTT重连】第{}次尝试重连(间隔{}秒)", currentReconnectCount, reconnectInterval);
// 兼容极端场景:先强制断开(无论当前状态),再重新连接 // 最小改动补充close+置空,彻底释放旧实例
try { try {
if (mqttClient.isConnected()) { if (mqttClient.isConnected()) {
mqttClient.disconnect(); mqttClient.disconnect();
log.info("【MQTT重连】已断开旧连接"); log.info("【MQTT重连】已断开旧连接");
} }
// 新增:关闭旧实例释放资源
mqttClient.close();
} catch (Exception e) { } catch (Exception e) {
log.warn("【MQTT重连】断开旧连接失败忽略{}", e.getMessage()); log.warn("【MQTT重连】断开/关闭旧连接失败(忽略):{}", e.getMessage());
} }
// 2. 生成新的clientId和MqttConfig中一致的规则原clientId + 随机后缀) // 2. 生成新的clientId和MqttConfig中一致的规则原clientId + 随机后缀)