关闭旧实例

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兼容
@PreDestroy
public void destroyMqttClient() {
if (mqttClientInstance != null && mqttClientInstance.isConnected()) {
// 最小改动:补充判空+close+置空,保留原有逻辑和注释
if (mqttClientInstance != null) {
try {
mqttClientInstance.disconnect();
if (mqttClientInstance.isConnected()) {
mqttClientInstance.disconnect();
log.info("【MQTT连接关闭】客户端已优雅断开连接");
}
// 新增:关闭实例释放资源
mqttClientInstance.close();
log.info("【MQTT连接关闭】客户端已优雅断开连接");
// 新增置空实例加速GC
mqttClientInstance = null;
} catch (MqttException e) {
log.error("【MQTT连接关闭异常】" + e.getMessage(), e);
}

View File

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