diff --git a/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGateway.java b/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGateway.java index 5738d22e..6021961e 100755 --- a/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGateway.java +++ b/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGateway.java @@ -3,6 +3,7 @@ package org.jetlinks.community.network.mqtt.gateway.device; import io.netty.handler.codec.mqtt.MqttConnectReturnCode; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.StatusCode; +import lombok.Getter; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.jetlinks.community.gateway.AbstractDeviceGateway; @@ -69,6 +70,7 @@ class MqttServerDeviceGateway extends AbstractDeviceGateway { private final DeviceSessionManager sessionManager; //Mqtt 服务 + @Getter private final MqttServer mqttServer; //解码后的设备消息处理器 diff --git a/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGatewayProvider.java b/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGatewayProvider.java index 49339eb0..6736e69a 100755 --- a/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGatewayProvider.java +++ b/jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGatewayProvider.java @@ -16,6 +16,8 @@ import org.jetlinks.supports.server.DecodedClientMessageHandler; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; +import java.util.Objects; + @Component public class MqttServerDeviceGatewayProvider implements DeviceGatewayProvider { @@ -79,4 +81,21 @@ public class MqttServerDeviceGatewayProvider implements DeviceGatewayProvider { Mono.empty() )); } + + @Override + public Mono reloadDeviceGateway(DeviceGateway gateway, + DeviceGatewayProperties properties) { + MqttServerDeviceGateway deviceGateway = ((MqttServerDeviceGateway) gateway); + + String networkId = properties.getChannelId(); + //网络组件发生了变化 + if (!Objects.equals(networkId, deviceGateway.getMqttServer().getId())) { + return gateway + .shutdown() + .then(this + .createDeviceGateway(properties) + .flatMap(gate -> gate.startup().thenReturn(gate))); + } + return Mono.just(gateway); + } }