关闭旧实例
parent
bc24edef61
commit
dee84cfe54
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 + 随机后缀)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue