You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2021/03/20 07:25:45 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2225] zero-config ignore different app's register request when disable cross app (#2303)

This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new a4d9b84  [SCB-2225] zero-config ignore different app's register request when disable cross app (#2303)
a4d9b84 is described below

commit a4d9b84c51561a427e3f0a99622679a87f149b43
Author: wujimin <wu...@huawei.com>
AuthorDate: Sat Mar 20 15:25:38 2021 +0800

    [SCB-2225] zero-config ignore different app's register request when disable cross app (#2303)
---
 .../registry/api/registry/Microservice.java        |  5 +++
 .../registry/api/registry/MicroserviceFactory.java |  7 +---
 .../registry/definition/DefinitionConst.java       |  1 +
 ...very.java => AbstractLightweightDiscovery.java} |  4 +-
 ...n.java => AbstractLightweightRegistration.java} |  4 +-
 .../registry/lightweight/RegisterRequest.java      | 22 ++++++++++
 .../servicecomb/registry/lightweight/Self.java     | 28 +++++++++----
 .../api/registry/TestMicroserviceFactory.java      | 22 ++++------
 .../org/apache/servicecomb/zeroconfig/Config.java  | 48 ++++++++++++++++++++++
 .../apache/servicecomb/zeroconfig/Multicast.java   | 21 ++++------
 .../zeroconfig/ZeroConfigDiscovery.java            | 14 +++----
 .../zeroconfig/ZeroConfigRegistration.java         | 13 +++---
 .../servicecomb/zeroconfig/ZeroConfigServer.java   | 16 +++++++-
 13 files changed, 145 insertions(+), 60 deletions(-)

diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/Microservice.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/Microservice.java
index a682143..4c003f0 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/Microservice.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/Microservice.java
@@ -266,4 +266,9 @@ public class Microservice {
   public void setThirdPartyService(boolean thirdPartyService) {
     this.thirdPartyService = thirdPartyService;
   }
+
+  // Whether to allow cross-app calls to me
+  public boolean allowCrossApp() {
+    return Boolean.parseBoolean(properties.get(DefinitionConst.CONFIG_ALLOW_CROSS_APP_KEY));
+  }
 }
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
index 431e728..1e2ba3a 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceFactory.java
@@ -29,7 +29,6 @@ import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.registry.config.ConfigurePropertyUtils;
 import org.apache.servicecomb.registry.config.MicroservicePropertiesLoader;
-import org.apache.servicecomb.registry.definition.DefinitionConst;
 import org.apache.servicecomb.registry.version.Version;
 
 public class MicroserviceFactory {
@@ -78,15 +77,11 @@ public class MicroserviceFactory {
     microservice.setEnvironment(BootStrapProperties.readServiceEnvironment(configuration));
 
     // set alias name when allow cross app
-    if (allowCrossApp(propertiesMap)) {
+    if (microservice.allowCrossApp()) {
       microservice.setAlias(Microservice.generateAbsoluteMicroserviceName(microservice.getAppId(),
           microservice.getServiceName()));
     }
 
     return microservice;
   }
-
-  private boolean allowCrossApp(Map<String, String> propertiesMap) {
-    return Boolean.parseBoolean(propertiesMap.get(DefinitionConst.CONFIG_ALLOW_CROSS_APP_KEY));
-  }
 }
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/DefinitionConst.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/DefinitionConst.java
index 5735927..deedacd 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/DefinitionConst.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/definition/DefinitionConst.java
@@ -18,6 +18,7 @@
 package org.apache.servicecomb.registry.definition;
 
 public interface DefinitionConst {
+  // Whether to allow cross-app calls to me
   String CONFIG_ALLOW_CROSS_APP_KEY = "allowCrossApp";
 
   String DEFAULT_STAGE = "prod";
diff --git a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightDiscovery.java b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightDiscovery.java
similarity index 92%
rename from service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightDiscovery.java
rename to service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightDiscovery.java
index d5e2ceb..16abd0c 100644
--- a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightDiscovery.java
+++ b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightDiscovery.java
@@ -28,10 +28,10 @@ import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
 import org.apache.servicecomb.registry.lightweight.store.MicroserviceStore;
 import org.apache.servicecomb.registry.lightweight.store.Store;
 
-public abstract class AbstractLightDiscovery implements Discovery {
+public abstract class AbstractLightweightDiscovery implements Discovery {
   protected Store store;
 
-  public AbstractLightDiscovery(Store store) {
+  public AbstractLightweightDiscovery(Store store) {
     this.store = store;
   }
 
diff --git a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightRegistration.java b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightRegistration.java
similarity index 91%
rename from service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightRegistration.java
rename to service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightRegistration.java
index c1dd1a8..179ca8f 100644
--- a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightRegistration.java
+++ b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/AbstractLightweightRegistration.java
@@ -26,11 +26,11 @@ import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public abstract class AbstractLightRegistration implements Registration {
+public abstract class AbstractLightweightRegistration implements Registration {
   protected Self self;
 
   @Autowired
-  public AbstractLightRegistration setSelf(Self self) {
+  public AbstractLightweightRegistration setSelf(Self self) {
     this.self = self;
     return this;
   }
diff --git a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/RegisterRequest.java b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/RegisterRequest.java
index 1b438bf..28356f3 100644
--- a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/RegisterRequest.java
+++ b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/RegisterRequest.java
@@ -24,8 +24,12 @@ import org.apache.servicecomb.core.invocation.endpoint.EndpointCacheUtils;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
 
 public class RegisterRequest {
+  private String appId;
+
   private String serviceId;
 
+  private boolean crossApp;
+
   private String schemasSummary;
 
   private String instanceId;
@@ -34,6 +38,15 @@ public class RegisterRequest {
 
   private List<String> endpoints;
 
+  public String getAppId() {
+    return appId;
+  }
+
+  public RegisterRequest setAppId(String appId) {
+    this.appId = appId;
+    return this;
+  }
+
   public String getServiceId() {
     return serviceId;
   }
@@ -43,6 +56,15 @@ public class RegisterRequest {
     return this;
   }
 
+  public boolean isCrossApp() {
+    return crossApp;
+  }
+
+  public RegisterRequest setCrossApp(boolean crossApp) {
+    this.crossApp = crossApp;
+    return this;
+  }
+
   public String getSchemasSummary() {
     return schemasSummary;
   }
diff --git a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/Self.java b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/Self.java
index 395bdcc..f8656a7 100644
--- a/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/Self.java
+++ b/service-registry/registry-lightweight/src/main/java/org/apache/servicecomb/registry/lightweight/Self.java
@@ -22,6 +22,7 @@ import java.util.UUID;
 import java.util.stream.Collectors;
 
 import org.apache.commons.configuration.AbstractConfiguration;
+import org.apache.servicecomb.core.BootListener;
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
 import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
@@ -33,9 +34,12 @@ import com.google.common.annotations.VisibleForTesting;
 import com.netflix.config.ConfigurationManager;
 
 @Component
-public class Self implements InitializingBean {
+public class Self implements InitializingBean, BootListener {
   private Microservice microservice;
 
+  // Whether to allow cross-app calls to me
+  private boolean crossApp;
+
   private String schemasSummary;
 
   private MicroserviceInstance instance;
@@ -49,8 +53,7 @@ public class Self implements InitializingBean {
 
   @VisibleForTesting
   public Self init(AbstractConfiguration configuration) {
-    MicroserviceFactory factory = new MicroserviceFactory();
-    microservice = factory.create(configuration);
+    microservice = new MicroserviceFactory().create(configuration);
     microservice.serviceId(String.format("%s/%s/%s/%s",
         microservice.getEnvironment(),
         microservice.getAppId(),
@@ -69,6 +72,17 @@ public class Self implements InitializingBean {
     return this;
   }
 
+  @Override
+  public int getOrder() {
+    return Integer.MAX_VALUE;
+  }
+
+  @Override
+  public void onBeforeRegistry(BootEvent event) {
+    schemasSummary = calcSchemasSummary();
+    crossApp = microservice.allowCrossApp();
+  }
+
   public Microservice getMicroservice() {
     return microservice;
   }
@@ -114,10 +128,6 @@ public class Self implements InitializingBean {
   }
 
   public String getSchemasSummary() {
-    if (schemasSummary == null) {
-      schemasSummary = calcSchemasSummary();
-    }
-
     return schemasSummary;
   }
 
@@ -131,8 +141,10 @@ public class Self implements InitializingBean {
 
   public RegisterRequest buildRegisterRequest() {
     return createRegisterRequest()
+        .setAppId(microservice.getAppId())
         .setServiceId(microservice.getServiceId())
-        .setSchemasSummary(getSchemasSummary())
+        .setCrossApp(crossApp)
+        .setSchemasSummary(schemasSummary)
         .setInstanceId(instance.getInstanceId())
         .setStatus(instance.getStatus())
         .setEndpoints(instance.getEndpoints());
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
index c3de510..d92064b 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
@@ -19,9 +19,6 @@ package org.apache.servicecomb.serviceregistry.api.registry;
 
 import static org.apache.servicecomb.registry.definition.DefinitionConst.CONFIG_ALLOW_CROSS_APP_KEY;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.config.BootStrapProperties;
 import org.apache.servicecomb.config.ConfigUtil;
@@ -32,26 +29,23 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import mockit.Deencapsulation;
-
 public class TestMicroserviceFactory {
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
 
   @Test
   public void testAllowCrossApp() {
-    MicroserviceFactory factory = new MicroserviceFactory();
-    Map<String, String> propertiesMap = new HashMap<>();
-    Assert.assertFalse(Deencapsulation.invoke(factory, "allowCrossApp", propertiesMap));
+    Microservice microservice = new Microservice();
+    Assert.assertFalse(microservice.allowCrossApp());
 
-    propertiesMap.put(CONFIG_ALLOW_CROSS_APP_KEY, "true");
-    Assert.assertTrue(Deencapsulation.invoke(factory, "allowCrossApp", propertiesMap));
+    microservice.getProperties().put(CONFIG_ALLOW_CROSS_APP_KEY, "true");
+    Assert.assertTrue(microservice.allowCrossApp());
 
-    propertiesMap.put(CONFIG_ALLOW_CROSS_APP_KEY, "false");
-    Assert.assertFalse(Deencapsulation.invoke(factory, "allowCrossApp", propertiesMap));
+    microservice.getProperties().put(CONFIG_ALLOW_CROSS_APP_KEY, "false");
+    Assert.assertFalse(microservice.allowCrossApp());
 
-    propertiesMap.put(CONFIG_ALLOW_CROSS_APP_KEY, "asfas");
-    Assert.assertFalse(Deencapsulation.invoke(factory, "allowCrossApp", propertiesMap));
+    microservice.getProperties().put(CONFIG_ALLOW_CROSS_APP_KEY, "asfas");
+    Assert.assertFalse(microservice.allowCrossApp());
   }
 
   @Test
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Config.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Config.java
new file mode 100644
index 0000000..e82761b
--- /dev/null
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Config.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.zeroconfig;
+
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_ADDRESS;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_ENABLED;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_GROUP;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.DEFAULT_ADDRESS;
+import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.DEFAULT_GROUP;
+
+import org.apache.servicecomb.config.DynamicProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Config {
+  private final DynamicProperties dynamicProperties;
+
+  public Config(DynamicProperties dynamicProperties) {
+    this.dynamicProperties = dynamicProperties;
+  }
+
+  public boolean isEnabled() {
+    return dynamicProperties.getBooleanProperty(CFG_ENABLED, true);
+  }
+
+  public String getAddress() {
+    return dynamicProperties.getStringProperty(CFG_ADDRESS, DEFAULT_ADDRESS);
+  }
+
+  // (224.0.0.0, 239.255.255.255]
+  public String getGroup() {
+    return dynamicProperties.getStringProperty(CFG_GROUP, DEFAULT_GROUP);
+  }
+}
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Multicast.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Multicast.java
index 3b6eae9..f209e81 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Multicast.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/Multicast.java
@@ -30,7 +30,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import com.google.common.net.HostAndPort;
-import com.netflix.config.DynamicPropertyFactory;
 
 import io.vertx.core.json.jackson.DatabindCodec;
 
@@ -49,9 +48,9 @@ public class Multicast {
 
   private final DatagramPacket recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
 
-  public Multicast() throws IOException {
-    this.bindAddress = initBindAddress();
-    this.group = initGroup();
+  public Multicast(Config config) throws IOException {
+    this.bindAddress = initBindAddress(config);
+    this.group = initGroup(config);
     LOGGER.info("zero config, address: {}", bindAddress);
     LOGGER.info("zero config, group: {}", group);
 
@@ -60,18 +59,14 @@ public class Multicast {
     this.multicastSocket.setSoTimeout((int) TimeUnit.SECONDS.toMillis(5));
   }
 
-  private InetSocketAddress initBindAddress() {
-    HostAndPort hostAndPort = HostAndPort
-        .fromString(readString(ZeroConfigConst.CFG_ADDRESS, ZeroConfigConst.DEFAULT_ADDRESS));
+  @SuppressWarnings("UnstableApiUsage")
+  private InetSocketAddress initBindAddress(Config config) {
+    HostAndPort hostAndPort = HostAndPort.fromString(config.getAddress());
     return new InetSocketAddress(hostAndPort.getHost(), hostAndPort.getPort());
   }
 
-  private InetAddress initGroup() throws UnknownHostException {
-    return InetAddress.getByName(readString(ZeroConfigConst.CFG_GROUP, ZeroConfigConst.DEFAULT_GROUP));
-  }
-
-  private String readString(String key, String defaultValue) {
-    return DynamicPropertyFactory.getInstance().getStringProperty(key, defaultValue).get();
+  private InetAddress initGroup(Config config) throws UnknownHostException {
+    return InetAddress.getByName(config.getGroup());
   }
 
   public <T> void send(MessageType type, T body) throws IOException {
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigDiscovery.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigDiscovery.java
index 4cd5738..605e854 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigDiscovery.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigDiscovery.java
@@ -16,7 +16,6 @@
  */
 package org.apache.servicecomb.zeroconfig;
 
-import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_ENABLED;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.ORDER;
 
 import java.util.concurrent.Executors;
@@ -24,24 +23,25 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.servicecomb.registry.api.registry.Microservice;
 import org.apache.servicecomb.registry.consumer.AppManager;
-import org.apache.servicecomb.registry.lightweight.AbstractLightDiscovery;
-import org.apache.servicecomb.registry.lightweight.DiscoveryClient;
+import org.apache.servicecomb.registry.lightweight.AbstractLightweightDiscovery;
 import org.apache.servicecomb.registry.lightweight.SchemaChangedEvent;
 import org.apache.servicecomb.registry.lightweight.store.Store;
 import org.springframework.stereotype.Component;
 
 import com.google.common.eventbus.EventBus;
 import com.google.common.eventbus.Subscribe;
-import com.netflix.config.DynamicPropertyFactory;
 
 @Component
-public class ZeroConfigDiscovery extends AbstractLightDiscovery {
+public class ZeroConfigDiscovery extends AbstractLightweightDiscovery {
   private static final String NAME = "zero-config discovery";
 
+  private final Config config;
+
   private final AppManager appManager;
 
-  public ZeroConfigDiscovery(Store store, DiscoveryClient discoveryClient, EventBus eventBus, AppManager appManager) {
+  public ZeroConfigDiscovery(Config config, Store store, EventBus eventBus, AppManager appManager) {
     super(store);
+    this.config = config;
     this.appManager = appManager;
 
     Executors
@@ -68,6 +68,6 @@ public class ZeroConfigDiscovery extends AbstractLightDiscovery {
 
   @Override
   public boolean enabled() {
-    return DynamicPropertyFactory.getInstance().getBooleanProperty(CFG_ENABLED, true).get();
+    return config.isEnabled();
   }
 }
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistration.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistration.java
index 134dc08..ec9f057 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistration.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigRegistration.java
@@ -16,7 +16,6 @@
  */
 package org.apache.servicecomb.zeroconfig;
 
-import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.CFG_ENABLED;
 import static org.apache.servicecomb.zeroconfig.ZeroConfigConst.ORDER;
 
 import java.util.concurrent.Executors;
@@ -24,7 +23,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.servicecomb.registry.api.event.MicroserviceInstanceRegisteredEvent;
-import org.apache.servicecomb.registry.lightweight.AbstractLightRegistration;
+import org.apache.servicecomb.registry.lightweight.AbstractLightweightRegistration;
 import org.apache.servicecomb.registry.lightweight.RegisterInstanceEvent;
 import org.apache.servicecomb.registry.lightweight.Self;
 import org.slf4j.Logger;
@@ -33,14 +32,15 @@ import org.springframework.stereotype.Component;
 
 import com.google.common.eventbus.EventBus;
 import com.google.common.eventbus.Subscribe;
-import com.netflix.config.DynamicPropertyFactory;
 
 @Component
-public class ZeroConfigRegistration extends AbstractLightRegistration {
+public class ZeroConfigRegistration extends AbstractLightweightRegistration {
   private static final Logger LOGGER = LoggerFactory.getLogger(ZeroConfigRegistration.class);
 
   private static final String NAME = "zero-config registration";
 
+  private final Config config;
+
   private final Multicast multicast;
 
   private final Self self;
@@ -50,7 +50,8 @@ public class ZeroConfigRegistration extends AbstractLightRegistration {
   private final ScheduledExecutorService executorService = Executors
       .newSingleThreadScheduledExecutor(runnable -> new Thread(runnable, "zero-config-register"));
 
-  public ZeroConfigRegistration(Multicast multicast, Self self, EventBus eventBus) {
+  public ZeroConfigRegistration(Config config, Multicast multicast, Self self, EventBus eventBus) {
+    this.config = config;
     this.multicast = multicast;
     this.self = self;
     this.eventBus = eventBus;
@@ -77,7 +78,7 @@ public class ZeroConfigRegistration extends AbstractLightRegistration {
 
   @Override
   public boolean enabled() {
-    return DynamicPropertyFactory.getInstance().getBooleanProperty(CFG_ENABLED, true).get();
+    return config.isEnabled();
   }
 
   @Override
diff --git a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigServer.java b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigServer.java
index 7d0e56d..17ae8b2 100644
--- a/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigServer.java
+++ b/service-registry/registry-zero-config/src/main/java/org/apache/servicecomb/zeroconfig/ZeroConfigServer.java
@@ -21,11 +21,14 @@ import java.net.SocketTimeoutException;
 import java.time.Duration;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.function.Consumer;
 
+import org.apache.servicecomb.registry.lightweight.RegisterRequest;
 import org.apache.servicecomb.registry.lightweight.RegistryServerService;
+import org.apache.servicecomb.registry.lightweight.Self;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -34,6 +37,8 @@ import org.springframework.stereotype.Component;
 public class ZeroConfigServer {
   private static final Logger LOGGER = LoggerFactory.getLogger(ZeroConfigServer.class);
 
+  private final Self self;
+
   private final Multicast multicast;
 
   private final RegistryServerService registryServerService;
@@ -43,11 +48,12 @@ public class ZeroConfigServer {
   private final Executor taskExecutor = Executors
       .newSingleThreadExecutor(runnable -> new Thread(runnable, "zero-config-server-task"));
 
-  public ZeroConfigServer(Multicast multicast, RegistryServerService registryServerService) {
+  public ZeroConfigServer(Self self, Multicast multicast, RegistryServerService registryServerService) {
+    this.self = self;
     this.multicast = multicast;
     this.registryServerService = registryServerService;
 
-    addMessageProcessor(MessageType.REGISTER, registryServerService::register);
+    addMessageProcessor(MessageType.REGISTER, this::register);
     addMessageProcessor(MessageType.UNREGISTER, registryServerService::unregister);
 
     Executors
@@ -55,6 +61,12 @@ public class ZeroConfigServer {
         .execute(this::recv);
   }
 
+  private void register(RegisterRequest request) {
+    if (request.isCrossApp() || Objects.equals(request.getAppId(), self.getAppId())) {
+      registryServerService.register(request);
+    }
+  }
+
   private <T> void addMessageProcessor(MessageType messageType, Consumer<T> messageProcessor) {
     messageProcessors.put(messageType, messageProcessor);
   }