diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java index 265779ed3f..60c5c641ec 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java @@ -426,7 +426,25 @@ public abstract class ServiceConfigBase extends AbstractServiceConfig { public abstract boolean isUnexported(); + /** + * Export service to network + * + * @param register Whether register service to registry. If false, can be registered manually + * through the {@link ServiceConfigBase#register(boolean)} API. + */ public abstract void export(boolean register); - public abstract void register(); + /** + * Register delay published service to registry. + */ + public final void register() { + register(false); + } + + /** + * Register delay published service to registry. + * + * @param onlyDefault only register those services that export with configured register false + */ + public abstract void register(boolean onlyDefault); } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java index a382c2fdb4..b22b0d2ab3 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java @@ -57,10 +57,10 @@ import java.beans.Transient; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; -import java.util.TreeSet; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeSet; import java.util.UUID; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -99,6 +99,7 @@ import static org.apache.dubbo.config.Constants.DUBBO_PORT_TO_BIND; import static org.apache.dubbo.config.Constants.DUBBO_PORT_TO_REGISTRY; import static org.apache.dubbo.config.Constants.SCOPE_NONE; import static org.apache.dubbo.registry.Constants.REGISTER_KEY; +import static org.apache.dubbo.registry.Constants.REGISTER_ORIGIN_KEY; import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY; import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY; import static org.apache.dubbo.remoting.Constants.IS_PU_SERVER_KEY; @@ -310,7 +311,7 @@ public class ServiceConfig extends ServiceConfigBase { } @Override - public void register() { + public void register(boolean onlyDefault) { if (!this.exported) { return; } @@ -321,7 +322,9 @@ public class ServiceConfig extends ServiceConfigBase { } for (Exporter exporter : exporters) { - exporter.register(); + if (!onlyDefault || exporter.getInvoker().getUrl().getParameter(REGISTER_ORIGIN_KEY, true)) { + exporter.register(); + } } } } @@ -813,6 +816,7 @@ public class ServiceConfig extends ServiceConfigBase { @SuppressWarnings({"unchecked", "rawtypes"}) private void doExportUrl(URL url, boolean withMetaData, boolean register) { if (!register) { + url = url.addParameter(REGISTER_ORIGIN_KEY, url.getParameter(REGISTER_KEY, true)); url = url.addParameter(REGISTER_KEY, false); } Invoker invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, url); diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java index 6bde316558..004be0e224 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java @@ -441,7 +441,7 @@ public class DefaultModuleDeployer extends AbstractDeployer impleme if (!sc.isExported()) { return; } - sc.register(); + sc.register(true); } private void unexportServices() { diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java index d21534436c..be991b256e 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Constants.java @@ -21,6 +21,7 @@ public interface Constants { String REGISTER_IP_KEY = "register.ip"; String REGISTER_KEY = "register"; + String REGISTER_ORIGIN_KEY = "register_origin"; String SUBSCRIBE_KEY = "subscribe"; diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java index 3a68a26433..1ba9b330b8 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/AbstractRegistry.java @@ -61,12 +61,12 @@ import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE; import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN; import static org.apache.dubbo.common.constants.CommonConstants.FILE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_LOCAL_FILE_CACHE_ENABLED; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_EMPTY_ADDRESS; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_NOTIFY_EVENT; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_DESTROY_UNREGISTER_URL; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_READ_WRITE_CACHE_FILE; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_DELETE_LOCKFILE; import static org.apache.dubbo.common.constants.LoggerCodeConstants.INTERNAL_ERROR; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_EMPTY_ADDRESS; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_DELETE_LOCKFILE; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_DESTROY_UNREGISTER_URL; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_NOTIFY_EVENT; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_FAILED_READ_WRITE_CACHE_FILE; import static org.apache.dubbo.common.constants.RegistryConstants.ACCEPTS_KEY; import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_CATEGORY; import static org.apache.dubbo.common.constants.RegistryConstants.DYNAMIC_KEY;