zhou-hao 4 years ago
parent
commit
68af4adc4b

+ 6 - 4
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/DeviceMessageBusinessHandler.java

@@ -127,10 +127,13 @@ public class DeviceMessageBusinessHandler {
     @Subscribe("/device/*/*/message/children/*/register")
     @Subscribe("/device/*/*/message/children/*/register")
     @Transactional(propagation = Propagation.NEVER)
     @Transactional(propagation = Propagation.NEVER)
     public Mono<Void> autoBindChildrenDevice(ChildDeviceMessage message) {
     public Mono<Void> autoBindChildrenDevice(ChildDeviceMessage message) {
-        String childId = message.getChildDeviceId();
         Message childMessage = message.getChildDeviceMessage();
         Message childMessage = message.getChildDeviceMessage();
         if (childMessage instanceof DeviceRegisterMessage) {
         if (childMessage instanceof DeviceRegisterMessage) {
-
+            String childId = ((DeviceRegisterMessage) childMessage).getDeviceId();
+            if (message.getDeviceId().equals(childId)) {
+                log.warn("子设备注册消息循环依赖:{}", message);
+                return Mono.empty();
+            }
             return registry
             return registry
                 .getDevice(childId)
                 .getDevice(childId)
                 .switchIfEmpty(Mono.defer(() -> doAutoRegister(((DeviceRegisterMessage) childMessage))))
                 .switchIfEmpty(Mono.defer(() -> doAutoRegister(((DeviceRegisterMessage) childMessage))))
@@ -157,10 +160,9 @@ public class DeviceMessageBusinessHandler {
      */
      */
     @Subscribe("/device/*/*/message/children/*/unregister")
     @Subscribe("/device/*/*/message/children/*/unregister")
     public Mono<Void> autoUnbindChildrenDevice(ChildDeviceMessage message) {
     public Mono<Void> autoUnbindChildrenDevice(ChildDeviceMessage message) {
-        String childId = message.getChildDeviceId();
         Message childMessage = message.getChildDeviceMessage();
         Message childMessage = message.getChildDeviceMessage();
         if (childMessage instanceof DeviceUnRegisterMessage) {
         if (childMessage instanceof DeviceUnRegisterMessage) {
-
+            String childId = ((DeviceUnRegisterMessage) childMessage).getDeviceId();
             return registry
             return registry
                 .getDevice(childId)
                 .getDevice(childId)
                 .flatMap(dev -> dev
                 .flatMap(dev -> dev