unify metadata and configcenter implementations (#4360)
* Polish apache/incubator-dubbo/#4096 : To add new module for Dubbo Event * Polish apache/incubator-dubbo#3942 : Dubbo Cloud Native: To Add Service registration and discovery abstract * Polish apache/incubator-dubbo#3946 : Dubbo Cloud Native : To Add Dubbo metadata service * Polish apache/incubator-dubbo#4093 : To add exported and unexported events for ServiceConfig * Polish apache/incubator-dubbo#3984 : Add Service registration and discovery implementation for Zookeeper * Polish apache/incubator-dubbo#4104 : To add initialized and destroyed events for ReferenceConfig * Polish apache/incubator-dubbo#3946 : Refactor Dubbo metadata service * Polish apache/incubator-dubbo#3946 : To Add MetadataServiceExporter into dubbo-config-api * Update ${project.parent.version} * Polish apache/incubator-dubbo#3946 : Refactor Dubbo metadata service * Polish apache/incubator-dubbo/#4096 : Remove the duplicated word * Polish apache/incubator-dubbo#4119 : DynamicConfiguration adds the publish and multiple get configuration methods * Polish apache/incubator-dubbo#4120 : To add DynamicConfiguration implementation for Zookeeper * Polish apache/incubator-dubbo#4121 : Add the mapping from service metadata to service name * Polish apache/incubator-dubbo/#3790 : Dependencies with no license * Polish apache/incubator-dubbo#4071 : @Reference can't match the local @Service beans * Update version to be 2.7.3 * Polish apache/incubator-dubbo#3946 : Add thread-safe and performance optimization * Polish apache/incubator-dubbo#3946 : Add thread-safe and performance optimization * Polish apache/incubator-dubbo#3946 : Add thread-safe and performance optimization * Update 2.7.3 * Polish apache/incubator-dubbo#4104 : To add more events for dubbo-config-api * Polish apache/incubator-dubbo#3942 : Dubbo Cloud Native: To Add Service registration and discovery abstract * Polish apache/incubator-dubbo#3984 : Add Service registration and discovery implementation for Zookeeper * Add Bootstrap * Polish GA * Polish apache/incubator-dubbo#4050 : Dubbo Cloud Native : Add a mechanism to upgrade Dubbo services smoothly * Polish apache/incubator-dubbo#4093 : To add DubboServiceDestroyedEvent * Polish apache/incubator-dubbo#4050 : Dubbo Cloud Native : Reactor * Polish apache/incubator-dubbo#3946 : Remove SPI * Polish apache/incubator-dubbo#4265 : [Feature] Dubbo Cloud Native - Add Bootstrap * Polish apache/incubator-dubbo#4265 : [Feature] Dubbo Cloud Native - Add Bootstrap * Polish apache/dubbo#4265 : Add test dependencies * Polish /apache/dubbo#3942 : Refactor implementation * Polish apache/incubator-dubbo#3984 : Refactor * Add Nacos implementation * Polish apache/incubator-dubbo#3984 : Add Nacos implementation * Polish apache/incubator-dubbo#4268 : Dubbo Event - To support Generic event type handle * Polish apache/incubator-dubbo#4268 : Update JavaDoc * Polish apache/incubator-dubbo#4268 : Add GenericEventListener implementation * add cache for MetadataServiceProxy * support multiple metadata and configcenter * unify metadata implementation * add missed files * remove duplicated files * add new SPIs and modules to dubbo-all pom.
This commit is contained in:
parent
5fb8dc07a8
commit
5008e0f2ac
|
|
@ -408,13 +408,6 @@
|
|||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-zookeeper</artifactId>
|
||||
|
|
@ -466,7 +459,7 @@
|
|||
<!-- metadata -->
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata-report-api</artifactId>
|
||||
<artifactId>dubbo-metadata-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
|
|
@ -516,14 +509,6 @@
|
|||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<!-- Transitive dependencies -->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
|
|
@ -640,15 +625,13 @@
|
|||
<include>org.apache.dubbo:dubbo-serialization-protostuff</include>
|
||||
<include>org.apache.dubbo:dubbo-serialization-gson</include>
|
||||
<include>org.apache.dubbo:dubbo-serialization-googlePb</include>
|
||||
<include>org.apache.dubbo:dubbo-configcenter-api</include>
|
||||
<include>org.apache.dubbo:dubbo-configcenter-definition</include>
|
||||
<include>org.apache.dubbo:dubbo-configcenter-apollo</include>
|
||||
<include>org.apache.dubbo:dubbo-configcenter-zookeeper</include>
|
||||
<include>org.apache.dubbo:dubbo-configcenter-consul</include>
|
||||
<include>org.apache.dubbo:dubbo-configcenter-etcd</include>
|
||||
<include>org.apache.dubbo:dubbo-configcenter-nacos</include>
|
||||
<include>org.apache.dubbo:dubbo-metadata-report-api</include>
|
||||
<include>org.apache.dubbo:dubbo-metadata-definition</include>
|
||||
<include>org.apache.dubbo:dubbo-metadata-api</include>
|
||||
<include>org.apache.dubbo:dubbo-metadata-report-redis</include>
|
||||
<include>org.apache.dubbo:dubbo-metadata-report-zookeeper</include>
|
||||
<include>org.apache.dubbo:dubbo-metadata-report-consul</include>
|
||||
|
|
@ -656,10 +639,7 @@
|
|||
<include>org.apache.dubbo:dubbo-metadata-report-nacos</include>
|
||||
<include>org.apache.dubbo:dubbo-serialization-native-hession</include>
|
||||
<include>org.apache.dubbo:dubbo-rpc-native-thrift</include>
|
||||
|
||||
<!-- 2.7.3 new modules -->
|
||||
<include>org.apache.dubbo:dubbo-event</include>
|
||||
<include>org.apache.dubbo:dubbo-metadata</include>
|
||||
</includes>
|
||||
</artifactSet>
|
||||
<transformers>
|
||||
|
|
@ -778,11 +758,11 @@
|
|||
</resource>
|
||||
</transformer>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfigurationFactory
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory
|
||||
</resource>
|
||||
</transformer>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.metadata.store.MetadataReportFactory
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory
|
||||
</resource>
|
||||
</transformer>
|
||||
<!-- @since 2.7.3 -->
|
||||
|
|
@ -795,7 +775,19 @@
|
|||
</resource>
|
||||
</transformer>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.metadata.LocalMetadataService
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.metadata.WritableMetadataService
|
||||
</resource>
|
||||
</transformer>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.metadata.ServiceNameMapping
|
||||
</resource>
|
||||
</transformer>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.registry.client.metadata.MetadataServiceProxyFactory
|
||||
</resource>
|
||||
</transformer>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
|
||||
<resource>META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory
|
||||
</resource>
|
||||
</transformer>
|
||||
</transformers>
|
||||
|
|
|
|||
|
|
@ -362,11 +362,22 @@
|
|||
<artifactId>dubbo-compatible</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<!-- metadata -->
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata-report-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata-definition</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata-report-zookeeper</artifactId>
|
||||
|
|
@ -392,11 +403,8 @@
|
|||
<artifactId>dubbo-metadata-report-nacos</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- config-center -->
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-zookeeper</artifactId>
|
||||
|
|
@ -422,11 +430,6 @@
|
|||
<artifactId>dubbo-configcenter-nacos</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata-definition</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@
|
|||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata-report-zookeeper</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-zookeeper</artifactId>
|
||||
|
|
@ -83,12 +90,6 @@
|
|||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.curator</groupId>
|
||||
<artifactId>curator-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
@ -17,19 +17,32 @@
|
|||
package org.apache.dubbo.bootstrap;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.Environment;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory;
|
||||
import org.apache.dubbo.common.config.configcenter.wrapper.CompositeDynamicConfiguration;
|
||||
import org.apache.dubbo.common.constants.CommonConstants;
|
||||
import org.apache.dubbo.common.extension.ExtensionLoader;
|
||||
import org.apache.dubbo.common.logger.Logger;
|
||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||
import org.apache.dubbo.common.utils.CollectionUtils;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.config.AbstractConfig;
|
||||
import org.apache.dubbo.config.AbstractInterfaceConfig;
|
||||
import org.apache.dubbo.config.ApplicationConfig;
|
||||
import org.apache.dubbo.config.ConfigCenterConfig;
|
||||
import org.apache.dubbo.config.ConsumerConfig;
|
||||
import org.apache.dubbo.config.DubboShutdownHook;
|
||||
import org.apache.dubbo.config.MetadataReportConfig;
|
||||
import org.apache.dubbo.config.ProtocolConfig;
|
||||
import org.apache.dubbo.config.ProviderConfig;
|
||||
import org.apache.dubbo.config.ReferenceConfig;
|
||||
import org.apache.dubbo.config.RegistryConfig;
|
||||
import org.apache.dubbo.config.ServiceConfig;
|
||||
import org.apache.dubbo.config.builders.AbstractBuilder;
|
||||
import org.apache.dubbo.config.builders.ApplicationBuilder;
|
||||
import org.apache.dubbo.config.builders.ConsumerBuilder;
|
||||
import org.apache.dubbo.config.builders.ProtocolBuilder;
|
||||
import org.apache.dubbo.config.builders.ProviderBuilder;
|
||||
import org.apache.dubbo.config.builders.ReferenceBuilder;
|
||||
import org.apache.dubbo.config.builders.RegistryBuilder;
|
||||
import org.apache.dubbo.config.builders.ServiceBuilder;
|
||||
|
|
@ -37,16 +50,19 @@ import org.apache.dubbo.config.context.ConfigManager;
|
|||
import org.apache.dubbo.config.metadata.ConfigurableMetadataServiceExporter;
|
||||
import org.apache.dubbo.event.EventDispatcher;
|
||||
import org.apache.dubbo.event.EventListener;
|
||||
import org.apache.dubbo.metadata.MetadataServiceExporter;
|
||||
import org.apache.dubbo.metadata.WritableMetadataService;
|
||||
import org.apache.dubbo.metadata.store.RemoteWritableMetadataService;
|
||||
import org.apache.dubbo.registry.client.DefaultServiceInstance;
|
||||
import org.apache.dubbo.registry.client.ServiceDiscovery;
|
||||
import org.apache.dubbo.registry.client.ServiceInstance;
|
||||
import org.apache.dubbo.registry.support.ServiceOrientedRegistry;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.locks.Condition;
|
||||
|
|
@ -55,12 +71,9 @@ import java.util.concurrent.locks.ReentrantLock;
|
|||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.Collections.emptyMap;
|
||||
import static java.util.concurrent.Executors.newSingleThreadExecutor;
|
||||
import static org.apache.dubbo.common.config.ConfigurationUtils.parseProperties;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
|
||||
import static org.apache.dubbo.common.utils.StringUtils.isBlank;
|
||||
import static org.apache.dubbo.common.utils.StringUtils.split;
|
||||
import static org.apache.dubbo.common.utils.StringUtils.trim;
|
||||
import static org.apache.dubbo.registry.support.AbstractRegistryFactory.getRegistries;
|
||||
|
||||
/**
|
||||
|
|
@ -82,8 +95,6 @@ public class DubboBootstrap {
|
|||
|
||||
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
private final MetadataServiceExporter metadataServiceExporter = new ConfigurableMetadataServiceExporter();
|
||||
|
||||
private final AtomicBoolean awaited = new AtomicBoolean(false);
|
||||
|
||||
private final Lock lock = new ReentrantLock();
|
||||
|
|
@ -112,6 +123,10 @@ public class DubboBootstrap {
|
|||
|
||||
private ApplicationBuilder applicationBuilder;
|
||||
|
||||
private ConsumerBuilder consumerBuilder;
|
||||
|
||||
private ProviderBuilder providerBuilder;
|
||||
|
||||
private Map<String, RegistryBuilder> registryBuilders = new HashMap<>();
|
||||
|
||||
private Map<String, ProtocolBuilder> protocolBuilders = new HashMap<>();
|
||||
|
|
@ -120,57 +135,8 @@ public class DubboBootstrap {
|
|||
|
||||
private Map<String, ReferenceBuilder<?>> referenceBuilders = new HashMap<>();
|
||||
|
||||
/**
|
||||
* The global {@link ApplicationConfig}
|
||||
*/
|
||||
private ApplicationConfig applicationConfig;
|
||||
|
||||
/**
|
||||
* the global {@link RegistryConfig registries}
|
||||
*/
|
||||
private Map<String, RegistryConfig> registryConfigs = emptyMap();
|
||||
|
||||
/**
|
||||
* the global {@link RegistryConfig registries}
|
||||
*/
|
||||
private Map<String, ProtocolConfig> protocolConfigs = emptyMap();
|
||||
|
||||
/**
|
||||
* the global {@link ServiceConfig services}
|
||||
*/
|
||||
private Map<String, ServiceConfig<?>> serviceConfigs = emptyMap();
|
||||
|
||||
/**
|
||||
* the global {@link ReferenceConfig references}
|
||||
*/
|
||||
private Map<String, ReferenceConfig<?>> referenceConfigs = new HashMap<>();
|
||||
|
||||
public ApplicationSettings application(String name) {
|
||||
return new ApplicationSettings(initApplicationBuilder(name), this);
|
||||
}
|
||||
|
||||
public RegistrySettings registry() {
|
||||
return registry(DEFAULT_REGISTRY_ID);
|
||||
}
|
||||
|
||||
public RegistrySettings registry(String id) {
|
||||
return new RegistrySettings(initRegistryBuilder(id), this);
|
||||
}
|
||||
|
||||
public ProtocolSettings protocol() {
|
||||
return protocol(DEFAULT_PROTOCOL_ID);
|
||||
}
|
||||
|
||||
public ProtocolSettings protocol(String id) {
|
||||
return new ProtocolSettings(initProtocolBuilder(id), this);
|
||||
}
|
||||
|
||||
public <S> ServiceSettings<S> service(String id) {
|
||||
return new ServiceSettings(initServiceBuilder(id), this);
|
||||
}
|
||||
|
||||
public <S> ReferenceSettings<S> reference(String id) {
|
||||
return new ReferenceSettings<>(initReferenceBuilder(id), this);
|
||||
public DubboBootstrap() {
|
||||
DubboShutdownHook.getDubboShutdownHook().register();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -184,6 +150,73 @@ public class DubboBootstrap {
|
|||
return this;
|
||||
}
|
||||
|
||||
/* accept Config instance */
|
||||
public DubboBootstrap application(ApplicationConfig applicationConfig) {
|
||||
ConfigManager.getInstance().setApplication(applicationConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap configCenter(ConfigCenterConfig configCenterConfig) {
|
||||
ConfigManager.getInstance().addConfigCenter(configCenterConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap configCenter(List<ConfigCenterConfig> configCenterConfigs) {
|
||||
ConfigManager.getInstance().addConfigCenter(configCenterConfigs);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap metadataReport(MetadataReportConfig metadataReportConfig) {
|
||||
ConfigManager.getInstance().addMetadataReport(metadataReportConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap metadataReport(List<MetadataReportConfig> metadataReportConfigs) {
|
||||
ConfigManager.getInstance().addMetadataReport(metadataReportConfigs);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap registry(RegistryConfig registryConfig) {
|
||||
ConfigManager.getInstance().addRegistry(registryConfig, true);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap registry(List<RegistryConfig> registryConfigs) {
|
||||
ConfigManager.getInstance().addRegistries(registryConfigs, true);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap protocol(ProtocolConfig protocolConfig) {
|
||||
ConfigManager.getInstance().addProtocol(protocolConfig, true);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap protocols(List<ProtocolConfig> protocolConfigs) {
|
||||
ConfigManager.getInstance().addProtocols(protocolConfigs, true);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap consumer(ConsumerConfig consumerConfig) {
|
||||
ConfigManager.getInstance().addConsumer(consumerConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap provider(ProviderConfig providerConfig) {
|
||||
ConfigManager.getInstance().addProvider(providerConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap service(ServiceConfig<?> serviceConfig) {
|
||||
ConfigManager.getInstance().addService(serviceConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DubboBootstrap reference(ReferenceConfig<?> referenceConfig) {
|
||||
ConfigManager.getInstance().addReference(referenceConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
/* accept builder functional interface */
|
||||
public DubboBootstrap application(String name, Consumer<ApplicationBuilder> builder) {
|
||||
initApplicationBuilder(name);
|
||||
builder.accept(applicationBuilder);
|
||||
|
|
@ -219,18 +252,31 @@ public class DubboBootstrap {
|
|||
return;
|
||||
}
|
||||
|
||||
initApplicationConfig();
|
||||
buildApplicationConfig();
|
||||
|
||||
initRegistryConfigs();
|
||||
buildRegistryConfigs();
|
||||
|
||||
initProtocolConfigs();
|
||||
buildProtocolConfigs();
|
||||
|
||||
initServiceConfigs();
|
||||
buildServiceConfigs();
|
||||
|
||||
initReferenceConfigs();
|
||||
buildReferenceConfigs();
|
||||
|
||||
clearBuilders();
|
||||
|
||||
startConfigCenter();
|
||||
startMetadataReport();
|
||||
|
||||
loadRemoteConfigs();
|
||||
useRegistryAsConfigCenterIfNecessary();
|
||||
|
||||
// checkApplication();
|
||||
// checkProvider();
|
||||
// chcckConsumer();
|
||||
// checkRegistry();
|
||||
// checkProtocol();
|
||||
// checkMonitor();
|
||||
|
||||
initialized = true;
|
||||
|
||||
if (logger.isInfoEnabled()) {
|
||||
|
|
@ -238,26 +284,67 @@ public class DubboBootstrap {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link ServiceConfig} by specified id
|
||||
*
|
||||
* @param id The {@link ServiceConfig#getId() id} of {@link ServiceConfig}
|
||||
* @param <S> the type of service interface
|
||||
* @return <code>null</code> if not found
|
||||
*/
|
||||
public <S> ServiceConfig<S> serviceConfig(String id) {
|
||||
return (ServiceConfig<S>) serviceConfigs.get(id);
|
||||
private void loadRemoteConfigs() {
|
||||
ConfigManager configManager = ConfigManager.getInstance();
|
||||
|
||||
// registry ids to registry configs
|
||||
List<RegistryConfig> tmpRegistries = new ArrayList<>();
|
||||
Set<String> registryIds = configManager.getRegistryIds();
|
||||
registryIds.forEach(id -> {
|
||||
if (tmpRegistries.stream().noneMatch(reg -> reg.getId().equals(id))) {
|
||||
tmpRegistries.add(configManager.getRegistry(id).orElseGet(() -> {
|
||||
RegistryConfig registryConfig = new RegistryConfig();
|
||||
registryConfig.setId(id);
|
||||
registryConfig.refresh();
|
||||
return registryConfig;
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
configManager.addRegistries(tmpRegistries, true);
|
||||
|
||||
// protocol ids to protocol configs
|
||||
List<ProtocolConfig> tmpProtocols = new ArrayList<>();
|
||||
Set<String> protocolIds = configManager.getProtocolIds();
|
||||
protocolIds.forEach(id -> {
|
||||
if (tmpProtocols.stream().noneMatch(prot -> prot.getId().equals(id))) {
|
||||
tmpProtocols.add(configManager.getProtocol(id).orElseGet(() -> {
|
||||
ProtocolConfig protocolConfig = new ProtocolConfig();
|
||||
protocolConfig.setId(id);
|
||||
protocolConfig.refresh();
|
||||
return protocolConfig;
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
configManager.addProtocols(tmpProtocols, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link ReferenceConfig} by specified id
|
||||
*
|
||||
* @param id The {@link ReferenceConfig#getId() id} of {@link ReferenceConfig}
|
||||
* @param <S> the type of service interface
|
||||
* @return <code>null</code> if not found
|
||||
* For compatibility purpose, use registry as the default config center when the registry protocol is zookeeper and
|
||||
* there's no config center specified explicitly.
|
||||
*/
|
||||
public <S> ReferenceConfig<S> referenceConfig(String id) {
|
||||
return (ReferenceConfig<S>) referenceConfigs.get(id);
|
||||
private void useRegistryAsConfigCenterIfNecessary() {
|
||||
ConfigManager configManager = ConfigManager.getInstance();
|
||||
configManager.getDefaultRegistries().ifPresent(registryConfigs -> {
|
||||
for (RegistryConfig registryConfig : registryConfigs) {
|
||||
if (registryConfig != null && registryConfig.isZookeeperProtocol()) {
|
||||
// we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
|
||||
Environment.getInstance().getDynamicConfiguration().orElseGet(() -> {
|
||||
Set<ConfigCenterConfig> configCenters = configManager.getConfigCenters();
|
||||
if (CollectionUtils.isEmpty(configCenters)) {
|
||||
ConfigCenterConfig cc = new ConfigCenterConfig();
|
||||
cc.setProtocol(registryConfig.getProtocol());
|
||||
cc.setAddress(registryConfig.getAddress());
|
||||
cc.setHighestPriority(false);
|
||||
configManager.addConfigCenter(cc);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
startConfigCenter();
|
||||
});
|
||||
}
|
||||
|
||||
private List<ServiceDiscovery> getServiceDiscoveries() {
|
||||
|
|
@ -282,11 +369,17 @@ public class DubboBootstrap {
|
|||
exportServices();
|
||||
|
||||
// Not only provider register and some services are exported
|
||||
if (!onlyRegisterProvider && !serviceConfigs.isEmpty()) {
|
||||
if (!onlyRegisterProvider && !ConfigManager.getInstance().getServiceConfigs().isEmpty()) {
|
||||
/**
|
||||
* export {@link MetadataService}
|
||||
*/
|
||||
List<URL> exportedURLs = exportMetadataService(applicationConfig, registryConfigs, protocolConfigs);
|
||||
ConfigManager configManager = ConfigManager.getInstance();
|
||||
// TODO, only export to default registry?
|
||||
List<URL> exportedURLs = exportMetadataService (
|
||||
configManager.getApplication().orElseThrow(() -> new IllegalStateException("ApplicationConfig cannot be null")),
|
||||
configManager.getDefaultRegistries().orElseThrow(() -> new IllegalStateException("No default RegistryConfig")),
|
||||
configManager.getDefaultProtocols().orElseThrow(() -> new IllegalStateException("No default ProtocolConfig"))
|
||||
);
|
||||
|
||||
/**
|
||||
* Register the local {@link ServiceInstance}
|
||||
|
|
@ -357,6 +450,7 @@ public class DubboBootstrap {
|
|||
return started;
|
||||
}
|
||||
|
||||
/* serve for builder apis, begin */
|
||||
private ApplicationBuilder initApplicationBuilder(String name) {
|
||||
applicationBuilder = new ApplicationBuilder().name(name);
|
||||
return applicationBuilder;
|
||||
|
|
@ -394,21 +488,76 @@ public class DubboBootstrap {
|
|||
return referenceBuilders.computeIfAbsent(id, this::createReferenceBuilder);
|
||||
}
|
||||
|
||||
private void initApplicationConfig() {
|
||||
this.applicationConfig = buildApplicationConfig();
|
||||
/* serve for builder apis, end */
|
||||
|
||||
private void startMetadataReport() {
|
||||
ApplicationConfig applicationConfig = ConfigManager.getInstance().getApplication().orElseThrow(() -> new IllegalStateException("There's no ApplicationConfig specified."));
|
||||
|
||||
// FIXME, multiple metadata config support.
|
||||
Set<MetadataReportConfig> metadataReportConfigs = ConfigManager.getInstance().getMetadataConfigs();
|
||||
if (CollectionUtils.isEmpty(metadataReportConfigs)) {
|
||||
if (CommonConstants.METADATA_REMOTE.equals(applicationConfig.getMetadata())) {
|
||||
throw new IllegalStateException("No MetadataConfig found, you must specify the remote Metadata Center address when set 'metadata=remote'.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
MetadataReportConfig metadataReportConfig = metadataReportConfigs.iterator().next();
|
||||
if (!metadataReportConfig.isValid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
RemoteWritableMetadataService remoteMetadataService =
|
||||
(RemoteWritableMetadataService) WritableMetadataService.getExtension(applicationConfig.getMetadata());
|
||||
remoteMetadataService.initMetadataReport(metadataReportConfig.toUrl());
|
||||
}
|
||||
|
||||
private void initRegistryConfigs() {
|
||||
this.registryConfigs = buildRegistryConfigs();
|
||||
private void startConfigCenter() {
|
||||
Set<ConfigCenterConfig> configCenters = ConfigManager.getInstance().getConfigCenters();
|
||||
|
||||
if (CollectionUtils.isNotEmpty(configCenters)) {
|
||||
CompositeDynamicConfiguration compositeDynamicConfiguration = new CompositeDynamicConfiguration();
|
||||
for (ConfigCenterConfig configCenter : configCenters) {
|
||||
configCenter.refresh();
|
||||
compositeDynamicConfiguration.addConfiguration(prepareEnvironment(configCenter));
|
||||
}
|
||||
Environment.getInstance().setDynamicConfiguration(compositeDynamicConfiguration);
|
||||
}
|
||||
ConfigManager.getInstance().refreshAll();
|
||||
}
|
||||
|
||||
private void initProtocolConfigs() {
|
||||
this.protocolConfigs = buildProtocolConfigs();
|
||||
private DynamicConfiguration prepareEnvironment(ConfigCenterConfig configCenter) {
|
||||
if (configCenter.isValid()) {
|
||||
if (!configCenter.checkOrUpdateInited()) {
|
||||
return null;
|
||||
}
|
||||
DynamicConfiguration dynamicConfiguration = getDynamicConfiguration(configCenter.toUrl());
|
||||
String configContent = dynamicConfiguration.getConfigs(configCenter.getConfigFile(), configCenter.getGroup());
|
||||
|
||||
String appGroup = ConfigManager.getInstance().getApplication().orElse(new ApplicationConfig()).getName();
|
||||
String appConfigContent = null;
|
||||
if (StringUtils.isNotEmpty(appGroup)) {
|
||||
appConfigContent = dynamicConfiguration.getConfigs
|
||||
(StringUtils.isNotEmpty(configCenter.getAppConfigFile()) ? configCenter.getAppConfigFile() : configCenter.getConfigFile(),
|
||||
appGroup
|
||||
);
|
||||
}
|
||||
try {
|
||||
Environment.getInstance().setConfigCenterFirst(configCenter.isHighestPriority());
|
||||
Environment.getInstance().updateExternalConfigurationMap(parseProperties(configContent));
|
||||
Environment.getInstance().updateAppExternalConfigurationMap(parseProperties(appConfigContent));
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException("Failed to parse configurations from Config Center.", e);
|
||||
}
|
||||
return dynamicConfiguration;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void initReferenceConfigs() {
|
||||
this.referenceConfigs = buildReferenceConfigs();
|
||||
this.referenceConfigs.values().forEach(this::initReferenceConfig);
|
||||
private DynamicConfiguration getDynamicConfiguration(URL url) {
|
||||
DynamicConfigurationFactory factory = ExtensionLoader
|
||||
.getExtensionLoader(DynamicConfigurationFactory.class)
|
||||
.getExtension(url.getProtocol());
|
||||
return factory.getDynamicConfiguration(url);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -422,103 +571,49 @@ public class DubboBootstrap {
|
|||
return this;
|
||||
}
|
||||
|
||||
private void initServiceConfigs() {
|
||||
this.serviceConfigs = buildServiceConfigs();
|
||||
this.serviceConfigs.values().forEach(this::initServiceConfig);
|
||||
}
|
||||
|
||||
private List<URL> exportMetadataService(ApplicationConfig applicationConfig,
|
||||
Map<String, RegistryConfig> globalRegistryConfigs,
|
||||
Map<String, ProtocolConfig> globalProtocolConfigs) {
|
||||
List<RegistryConfig> globalRegistryConfigs,
|
||||
List<ProtocolConfig> globalProtocolConfigs) {
|
||||
ConfigurableMetadataServiceExporter exporter = new ConfigurableMetadataServiceExporter();
|
||||
exporter.setApplicationConfig(applicationConfig);
|
||||
exporter.setRegistries(globalRegistryConfigs.values());
|
||||
exporter.setProtocols(globalProtocolConfigs.values());
|
||||
exporter.setRegistries(globalRegistryConfigs);
|
||||
exporter.setProtocols(globalProtocolConfigs);
|
||||
return exporter.export();
|
||||
}
|
||||
|
||||
private ApplicationConfig buildApplicationConfig() {
|
||||
return applicationBuilder.build();
|
||||
private void buildApplicationConfig() {
|
||||
ApplicationConfig applicationConfig = null;
|
||||
if (applicationBuilder != null) {
|
||||
applicationConfig = applicationBuilder.build();
|
||||
}
|
||||
ConfigManager.getInstance().setApplication(applicationConfig);
|
||||
}
|
||||
|
||||
private Map<String, ProtocolConfig> buildProtocolConfigs() {
|
||||
return buildConfigs(protocolBuilders);
|
||||
private void buildProtocolConfigs() {
|
||||
List<ProtocolConfig> protocolConfigs = buildConfigs(protocolBuilders);
|
||||
ConfigManager.getInstance().addProtocols(protocolConfigs, true);
|
||||
}
|
||||
|
||||
private Map<String, RegistryConfig> buildRegistryConfigs() {
|
||||
return buildConfigs(registryBuilders);
|
||||
private void buildRegistryConfigs() {
|
||||
List<RegistryConfig> registryConfigs = buildConfigs(registryBuilders);
|
||||
ConfigManager.getInstance().addRegistries(registryConfigs, true);
|
||||
}
|
||||
|
||||
private Map<String, ServiceConfig<?>> buildServiceConfigs() {
|
||||
return buildConfigs(serviceBuilders);
|
||||
private void buildServiceConfigs() {
|
||||
List<ServiceConfig<?>> serviceConfigs = buildConfigs(serviceBuilders);
|
||||
serviceConfigs.forEach(ConfigManager.getInstance()::addService);
|
||||
}
|
||||
|
||||
private Map<String, ReferenceConfig<?>> buildReferenceConfigs() {
|
||||
return buildConfigs(referenceBuilders);
|
||||
private void buildReferenceConfigs() {
|
||||
List<ReferenceConfig<?>> referenceConfigs = buildConfigs(referenceBuilders);
|
||||
referenceConfigs.forEach(ConfigManager.getInstance()::addReference);
|
||||
}
|
||||
|
||||
private void exportServices() {
|
||||
serviceConfigs.values().forEach(this::exportServiceConfig);
|
||||
ConfigManager.getInstance().getServiceConfigs().forEach(this::exportServiceConfig);
|
||||
}
|
||||
|
||||
private void initServiceConfig(ServiceConfig<?> serviceConfig) {
|
||||
initConfig(serviceConfig);
|
||||
initProtocols(serviceConfig);
|
||||
}
|
||||
|
||||
private void initReferenceConfig(ReferenceConfig<?> referenceConfig) {
|
||||
initConfig(referenceConfig);
|
||||
}
|
||||
|
||||
private void initConfig(AbstractInterfaceConfig config) {
|
||||
initApplication(config);
|
||||
initRegistries(config);
|
||||
}
|
||||
|
||||
private void initApplication(AbstractInterfaceConfig config) {
|
||||
if (config.getApplication() == null) {
|
||||
config.setApplication(applicationConfig);
|
||||
}
|
||||
}
|
||||
|
||||
private void initRegistries(AbstractInterfaceConfig config) {
|
||||
List<RegistryConfig> registries = config.getRegistries();
|
||||
if (CollectionUtils.isEmpty(registries)) { // If no registry present
|
||||
registries = new LinkedList<>();
|
||||
String registerIds = config.getRegistryIds();
|
||||
if (!isBlank(registerIds)) {
|
||||
for (String id : split(registerIds, ',')) {
|
||||
RegistryConfig registryConfig = registryConfigs.get(trim(id));
|
||||
registries.add(registryConfig);
|
||||
}
|
||||
}
|
||||
if (registries.isEmpty()) { // If empty, add all global registries
|
||||
registries.addAll(registryConfigs.values());
|
||||
}
|
||||
|
||||
config.setRegistries(registries);
|
||||
}
|
||||
}
|
||||
|
||||
private void initProtocols(ServiceConfig<?> serviceConfig) {
|
||||
List<ProtocolConfig> protocols = serviceConfig.getProtocols();
|
||||
if (CollectionUtils.isEmpty(protocols)) { // If no protocols present
|
||||
protocols = new LinkedList<>();
|
||||
String protocolIds = serviceConfig.getProtocolIds();
|
||||
if (!isBlank(protocolIds)) {
|
||||
for (String id : split(protocolIds, ',')) {
|
||||
ProtocolConfig protocol = protocolConfigs.get(trim(id));
|
||||
protocols.add(protocol);
|
||||
}
|
||||
}
|
||||
if (protocols.isEmpty()) { // If empty, add all global protocols
|
||||
protocols.addAll(protocolConfigs.values());
|
||||
}
|
||||
serviceConfig.setProtocols(protocols);
|
||||
}
|
||||
}
|
||||
|
||||
private void exportServiceConfig(ServiceConfig<?> serviceConfig) {
|
||||
public void exportServiceConfig(ServiceConfig<?> serviceConfig) {
|
||||
serviceConfig.export();
|
||||
}
|
||||
|
||||
|
|
@ -563,14 +658,14 @@ public class DubboBootstrap {
|
|||
}
|
||||
|
||||
private void destroyProtocolConfigs() {
|
||||
protocolConfigs.values().forEach(ProtocolConfig::destroy);
|
||||
ConfigManager.getInstance().getProtocols().values().forEach(ProtocolConfig::destroy);
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(NAME + "'s all ProtocolConfigs have been destroyed.");
|
||||
}
|
||||
}
|
||||
|
||||
private void destroyReferenceConfigs() {
|
||||
referenceConfigs.values().forEach(ReferenceConfig::destroy);
|
||||
ConfigManager.getInstance().getReferenceConfigs().forEach(ReferenceConfig::destroy);
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(NAME + "'s all ReferenceConfigs have been destroyed.");
|
||||
}
|
||||
|
|
@ -586,11 +681,7 @@ public class DubboBootstrap {
|
|||
}
|
||||
|
||||
private void clearConfigs() {
|
||||
this.applicationConfig = null;
|
||||
this.registryConfigs.clear();
|
||||
this.protocolConfigs.clear();
|
||||
this.serviceConfigs.clear();
|
||||
this.referenceConfigs.clear();
|
||||
ConfigManager.getInstance().clear();
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(NAME + "'s configs have been clear.");
|
||||
}
|
||||
|
|
@ -634,10 +725,10 @@ public class DubboBootstrap {
|
|||
}
|
||||
}
|
||||
|
||||
private static <C extends AbstractConfig, B extends AbstractBuilder> Map<String, C> buildConfigs(Map<String, B> map) {
|
||||
Map<String, C> configs = new HashMap<>();
|
||||
private static <C extends AbstractConfig, B extends AbstractBuilder> List<C> buildConfigs(Map<String, B> map) {
|
||||
List<C> configs = new ArrayList<>();
|
||||
map.entrySet().forEach(entry -> {
|
||||
configs.put(entry.getKey(), (C) entry.getValue().build());
|
||||
configs.add((C) entry.getValue().build());
|
||||
});
|
||||
return configs;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@
|
|||
*/
|
||||
package org.apache.dubbo.bootstrap;
|
||||
|
||||
import org.apache.dubbo.common.utils.NetUtils;
|
||||
import org.apache.dubbo.config.builders.ApplicationBuilder;
|
||||
import org.apache.dubbo.config.builders.ProtocolBuilder;
|
||||
import org.apache.dubbo.config.builders.RegistryBuilder;
|
||||
import org.apache.dubbo.config.builders.ServiceBuilder;
|
||||
|
||||
import org.apache.curator.test.TestingServer;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
|
@ -32,65 +32,17 @@ import java.io.IOException;
|
|||
*/
|
||||
public class DubboBootstrapTest {
|
||||
|
||||
private static int zkServerPort = NetUtils.getAvailablePort();
|
||||
|
||||
private static TestingServer zkServer;
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void init() throws Exception {
|
||||
zkServer = new TestingServer(zkServerPort, true);
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
public static void destroy() throws IOException {
|
||||
zkServer.stop();
|
||||
zkServer.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProviderInFluentAPI() {
|
||||
public void test() throws IOException {
|
||||
|
||||
new DubboBootstrap()
|
||||
.application("dubbo-provider-demo")
|
||||
.next()
|
||||
.registry()
|
||||
.address("zookeeper://127.0.0.1:" + zkServerPort + "?registry-type=service")
|
||||
.next()
|
||||
.protocol()
|
||||
.name("dubbo")
|
||||
.port(-1)
|
||||
.next()
|
||||
.service("test")
|
||||
.interfaceClass(EchoService.class)
|
||||
.ref(new EchoServiceImpl())
|
||||
.group("DEFAULT")
|
||||
.version("1.0.0")
|
||||
.next()
|
||||
.application(ApplicationBuilder.newBuilder().name("dubbo-provider-demo").build())
|
||||
.registry(RegistryBuilder.newBuilder().address("zookeeper://127.0.0.1:2181?registry-type=service&metadata=remote").build())
|
||||
.protocol(ProtocolBuilder.newBuilder().port(-1).name("dubbo").build())
|
||||
.service(ServiceBuilder.newBuilder().id("test").interfaceClass(EchoService.class).ref(new EchoServiceImpl()).build())
|
||||
.start()
|
||||
.stop();
|
||||
.await();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProviderInLambda() {
|
||||
new DubboBootstrap()
|
||||
.application("dubbo-provider-demo", builder -> {
|
||||
})
|
||||
.registry("default", builder ->
|
||||
builder.address("zookeeper://127.0.0.1:" + zkServerPort + "?registry-type=service")
|
||||
)
|
||||
.protocol("defalt", builder ->
|
||||
builder.name("dubbo")
|
||||
.port(-1)
|
||||
)
|
||||
.service("test", builder ->
|
||||
builder.interfaceClass(EchoService.class)
|
||||
.ref(new EchoServiceImpl())
|
||||
.group("DEFAULT")
|
||||
.version("1.0.0")
|
||||
)
|
||||
.start()
|
||||
.stop();
|
||||
System.in.read();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,9 @@
|
|||
*/
|
||||
package org.apache.dubbo.bootstrap;
|
||||
|
||||
import org.apache.dubbo.config.ReferenceConfig;
|
||||
|
||||
import static org.apache.dubbo.bootstrap.EchoService.GROUP;
|
||||
import static org.apache.dubbo.bootstrap.EchoService.VERSION;
|
||||
import org.apache.dubbo.config.builders.ApplicationBuilder;
|
||||
import org.apache.dubbo.config.builders.ReferenceBuilder;
|
||||
import org.apache.dubbo.config.builders.RegistryBuilder;
|
||||
|
||||
/**
|
||||
* Dubbo Provider Bootstrap
|
||||
|
|
@ -31,28 +30,22 @@ public class DubboServiceConsumerBootstrap {
|
|||
public static void main(String[] args) throws Exception {
|
||||
|
||||
DubboBootstrap bootstrap = new DubboBootstrap()
|
||||
.application("dubbo-consumer-demo")
|
||||
.next()
|
||||
.registry()
|
||||
.address("nacos://127.0.0.1:8848?registry-type=service&subscribed-services=dubbo-provider-demo")
|
||||
.next()
|
||||
.reference("ref")
|
||||
.interfaceClass(EchoService.class)
|
||||
.group(GROUP)
|
||||
.version(VERSION)
|
||||
.next()
|
||||
.application(ApplicationBuilder.newBuilder().name("dubbo-consumer-demo").build())
|
||||
.registry(RegistryBuilder.newBuilder().address("zookeeper://127.0.0.1:2181?registry-type=service&subscribed-services=dubbo-provider-demo&metadata=remote").build())
|
||||
.reference(ReferenceBuilder.newBuilder().id("ref").interfaceClass(EchoService.class).build())
|
||||
.onlyRegisterProvider(true)
|
||||
.start()
|
||||
.await();
|
||||
|
||||
ReferenceConfig<EchoService> referenceConfig = bootstrap.referenceConfig("ref");
|
||||
|
||||
EchoService echoService = referenceConfig.get();
|
||||
|
||||
for (int i = 0; i < 500; i++) {
|
||||
Thread.sleep(2000L);
|
||||
System.out.println(echoService.echo("Hello,World"));
|
||||
}
|
||||
// TODO,
|
||||
// ReferenceConfig<EchoService> referenceConfig = ReferenceConfigCache.getCache().get(EchoService.class.getName(), EchoService.class);
|
||||
//
|
||||
// EchoService echoService = referenceConfig.get();
|
||||
//
|
||||
// for (int i = 0; i < 500; i++) {
|
||||
// Thread.sleep(2000L);
|
||||
// System.out.println(echoService.echo("Hello,World"));
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,13 @@
|
|||
*/
|
||||
package org.apache.dubbo.bootstrap;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.apache.dubbo.config.builders.ApplicationBuilder;
|
||||
import org.apache.dubbo.config.builders.MetadataReportBuilder;
|
||||
import org.apache.dubbo.config.builders.ProtocolBuilder;
|
||||
import org.apache.dubbo.config.builders.RegistryBuilder;
|
||||
import org.apache.dubbo.config.builders.ServiceBuilder;
|
||||
|
||||
import static org.apache.dubbo.bootstrap.EchoService.GROUP;
|
||||
import static org.apache.dubbo.bootstrap.EchoService.VERSION;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Dubbo Provider Bootstrap
|
||||
|
|
@ -31,21 +34,12 @@ public class DubboServiceProviderBootstrap {
|
|||
public static void main(String[] args) throws IOException {
|
||||
|
||||
new DubboBootstrap()
|
||||
.application("dubbo-provider-demo")
|
||||
.next()
|
||||
.registry()
|
||||
.address("nacos://127.0.0.1:8848?registry-type=service")
|
||||
.next()
|
||||
.protocol()
|
||||
.name("dubbo")
|
||||
.port(-1)
|
||||
.next()
|
||||
.service("test")
|
||||
.interfaceClass(EchoService.class)
|
||||
.ref(new EchoServiceImpl())
|
||||
.group(GROUP)
|
||||
.version(VERSION)
|
||||
.next()
|
||||
.application(ApplicationBuilder.newBuilder().name("dubbo-provider-demo").metadata("remote").build())
|
||||
.metadataReport(MetadataReportBuilder.newBuilder().address("zookeeper://127.0.0.1:2181").build())
|
||||
// .application(ApplicationBuilder.newBuilder().name("dubbo-provider-demo").build())
|
||||
.registry(RegistryBuilder.newBuilder().address("zookeeper://127.0.0.1:2181?registry-type=service").build())
|
||||
.protocol(ProtocolBuilder.newBuilder().port(-1).name("dubbo").build())
|
||||
.service(ServiceBuilder.newBuilder().id("test").interfaceClass(EchoService.class).ref(new EchoServiceImpl()).build())
|
||||
.start()
|
||||
.await();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,11 +34,6 @@
|
|||
<artifactId>dubbo-rpc-api</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.yaml</groupId>
|
||||
<artifactId>snakeyaml</artifactId>
|
||||
|
|
|
|||
|
|
@ -46,4 +46,6 @@ public interface Directory<T> extends Node {
|
|||
*/
|
||||
List<Invoker<T>> list(Invocation invocation) throws RpcException;
|
||||
|
||||
List<Invoker<T>> getAllInvokers();
|
||||
|
||||
}
|
||||
|
|
@ -61,6 +61,11 @@ public class StaticDirectory<T> extends AbstractDirectory<T> {
|
|||
return invokers.get(0).getInterface();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Invoker<T>> getAllInvokers() {
|
||||
return invokers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
if (isDestroyed()) {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
package org.apache.dubbo.rpc.cluster.router;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.rpc.cluster.Router;
|
||||
|
||||
public abstract class AbstractRouter implements Router {
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
package org.apache.dubbo.rpc.cluster.router.condition.config;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.constants.CommonConstants;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
|
||||
/**
|
||||
* Application level router, "application.condition-router"
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
package org.apache.dubbo.rpc.cluster.router.condition.config;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.extension.Activate;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.rpc.cluster.Router;
|
||||
import org.apache.dubbo.rpc.cluster.RouterFactory;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,14 +17,14 @@
|
|||
package org.apache.dubbo.rpc.cluster.router.condition.config;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.logger.Logger;
|
||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||
import org.apache.dubbo.common.utils.CollectionUtils;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.rpc.Invocation;
|
||||
import org.apache.dubbo.rpc.Invoker;
|
||||
import org.apache.dubbo.rpc.RpcException;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
package org.apache.dubbo.rpc.cluster.router.condition.config;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
|
||||
/**
|
||||
* Service level router, "server-unique-name.condition-router"
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
package org.apache.dubbo.rpc.cluster.router.condition.config;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.extension.Activate;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.rpc.cluster.CacheableRouterFactory;
|
||||
import org.apache.dubbo.rpc.cluster.Router;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,16 +17,16 @@
|
|||
package org.apache.dubbo.rpc.cluster.router.tag;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.constants.CommonConstants;
|
||||
import org.apache.dubbo.common.logger.Logger;
|
||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||
import org.apache.dubbo.common.utils.CollectionUtils;
|
||||
import org.apache.dubbo.common.utils.NetUtils;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.rpc.Invocation;
|
||||
import org.apache.dubbo.rpc.Invoker;
|
||||
import org.apache.dubbo.rpc.RpcException;
|
||||
|
|
@ -40,8 +40,8 @@ import java.util.List;
|
|||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.apache.dubbo.rpc.cluster.Constants.TAG_KEY;
|
||||
import static org.apache.dubbo.rpc.Constants.FORCE_USE_TAG;
|
||||
import static org.apache.dubbo.rpc.cluster.Constants.TAG_KEY;
|
||||
|
||||
/**
|
||||
* TagRouter, "application.tag-router"
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
package org.apache.dubbo.rpc.cluster.router.tag;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.extension.Activate;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.rpc.cluster.CacheableRouterFactory;
|
||||
import org.apache.dubbo.rpc.cluster.Router;
|
||||
|
||||
|
|
|
|||
|
|
@ -94,6 +94,10 @@ public abstract class AbstractClusterInvoker<T> implements Invoker<T> {
|
|||
return directory.isAvailable();
|
||||
}
|
||||
|
||||
public Directory<T> getDirectory() {
|
||||
return directory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
if (destroyed.compareAndSet(false, true)) {
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ public abstract class Proxy {
|
|||
|
||||
for (Method method : ics[i].getMethods()) {
|
||||
String desc = ReflectUtils.getDesc(method);
|
||||
if (worked.contains(desc)) {
|
||||
if (worked.contains(desc) || Modifier.isStatic(method.getModifiers())) {
|
||||
continue;
|
||||
}
|
||||
worked.add(desc);
|
||||
|
|
|
|||
|
|
@ -14,27 +14,26 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter;
|
||||
package org.apache.dubbo.common.config.configcenter;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractDynamicConfigurationFactory implements DynamicConfigurationFactory {
|
||||
|
||||
private volatile DynamicConfiguration dynamicConfiguration;
|
||||
private volatile Map<String, DynamicConfiguration> dynamicConfigurations = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public DynamicConfiguration getDynamicConfiguration(URL url) {
|
||||
if (dynamicConfiguration == null) {
|
||||
synchronized (this) {
|
||||
if (dynamicConfiguration == null) {
|
||||
dynamicConfiguration = createDynamicConfiguration(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
return dynamicConfiguration;
|
||||
String key = url == null ? DEFAULT_KEY : url.getAddress();
|
||||
return dynamicConfigurations.computeIfAbsent(key, k -> createDynamicConfiguration(url));
|
||||
}
|
||||
|
||||
protected abstract DynamicConfiguration createDynamicConfiguration(URL url);
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter;
|
||||
package org.apache.dubbo.common.config.configcenter;
|
||||
|
||||
/**
|
||||
* Config change event, immutable.
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter;
|
||||
package org.apache.dubbo.common.config.configcenter;
|
||||
|
||||
/**
|
||||
* Config change event type
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter;
|
||||
package org.apache.dubbo.common.config.configcenter;
|
||||
|
||||
/**
|
||||
* Config listener, will get notified when the config it listens on changes.
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter;
|
||||
package org.apache.dubbo.common.config.configcenter;
|
||||
|
||||
public interface Constants {
|
||||
String CONFIG_CLUSTER_KEY = "config.cluster";
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter;
|
||||
package org.apache.dubbo.common.config.configcenter;
|
||||
|
||||
import org.apache.dubbo.common.config.Configuration;
|
||||
import org.apache.dubbo.common.config.Environment;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter;
|
||||
package org.apache.dubbo.common.config.configcenter;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.extension.SPI;
|
||||
|
|
@ -14,11 +14,15 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter.support.nop;
|
||||
package org.apache.dubbo.common.config.configcenter.nop;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
|
||||
import java.util.SortedSet;
|
||||
|
||||
import static java.util.Collections.emptySortedSet;
|
||||
|
||||
import java.util.SortedSet;
|
||||
|
||||
|
|
@ -14,11 +14,11 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.configcenter.support.nop;
|
||||
package org.apache.dubbo.common.config.configcenter.nop;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
* 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.dubbo.common.config.configcenter.wrapper;
|
||||
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.SortedMap;
|
||||
import java.util.SortedSet;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* support multiple config center, simply iterating each underlying config center.
|
||||
*/
|
||||
public class CompositeDynamicConfiguration implements DynamicConfiguration {
|
||||
|
||||
public static final String NAME = "COMPOSITE";
|
||||
|
||||
private Set<DynamicConfiguration> configurations = new HashSet<>();
|
||||
|
||||
public void addConfiguration(DynamicConfiguration configuration) {
|
||||
this.configurations.add(configuration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(String key, String group, ConfigurationListener listener) {
|
||||
iterateListenerOperation(configuration -> configuration.addListener(key, group, listener));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(String key, String group, ConfigurationListener listener) {
|
||||
iterateListenerOperation(configuration -> configuration.removeListener(key, group, listener));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConfig(String key, String group, long timeout) throws IllegalStateException {
|
||||
return (String) iterateConfigOperation(configuration -> configuration.getConfig(key, group, timeout));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConfigs(String key, String group, long timeout) throws IllegalStateException {
|
||||
return (String) iterateConfigOperation(configuration -> configuration.getConfigs(key, group, timeout));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getInternalProperty(String key) {
|
||||
return iterateConfigOperation(configuration -> configuration.getInternalProperty(key));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean publishConfig(String key, String group, String content) throws UnsupportedOperationException {
|
||||
return (boolean) iterateConfigOperation(configuration -> configuration.publishConfig(key, group, content));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SortedSet<String> getConfigKeys(String group) throws UnsupportedOperationException {
|
||||
return (SortedSet<String>) iterateConfigOperation(configuration -> configuration.getConfigKeys(group));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SortedMap<String, String> getConfigs(String group) throws UnsupportedOperationException {
|
||||
return (SortedMap<String, String>) iterateConfigOperation(configuration -> configuration.getConfigs(group));
|
||||
}
|
||||
|
||||
private void iterateListenerOperation(Consumer<DynamicConfiguration> consumer) {
|
||||
for (DynamicConfiguration configuration : configurations) {
|
||||
consumer.accept(configuration);
|
||||
}
|
||||
}
|
||||
|
||||
private Object iterateConfigOperation(Function<DynamicConfiguration, Object> func) {
|
||||
Object value = null;
|
||||
for (DynamicConfiguration configuration : configurations) {
|
||||
value = func.apply(configuration);
|
||||
if (value != null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
|
@ -151,6 +151,14 @@ public interface CommonConstants {
|
|||
|
||||
String REVISION_KEY = "revision";
|
||||
|
||||
String METADATA_REVISION = "metadata.revision";
|
||||
|
||||
String METADATA_KEY = "metadata";
|
||||
|
||||
String METADATA_DEFAULT = "local";
|
||||
|
||||
String METADATA_REMOTE = "remote";
|
||||
|
||||
/**
|
||||
* package version in the manifest
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -498,4 +498,25 @@ public class UrlUtils {
|
|||
return "*".equals(pattern) || pattern.equals(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param serviceKey, {group}/{interfaceName}:{version}
|
||||
* @return [group, interfaceName, version]
|
||||
*/
|
||||
public static String[] parseServiceKey(String serviceKey) {
|
||||
String[] arr = new String[3];
|
||||
int i = serviceKey.indexOf("/");
|
||||
if (i > 0) {
|
||||
arr[0] = serviceKey.substring(0, i);
|
||||
serviceKey = serviceKey.substring(i + 1);
|
||||
}
|
||||
|
||||
int j = serviceKey.indexOf(":");
|
||||
if (j > 0) {
|
||||
arr[2] = serviceKey.substring(j + 1);
|
||||
serviceKey = serviceKey.substring(0, j);
|
||||
}
|
||||
arr[1] = serviceKey;
|
||||
return arr;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
nop=org.apache.dubbo.common.config.configcenter.nop.NopDynamicConfigurationFactory
|
||||
|
|
@ -36,7 +36,7 @@ public class Constants implements CommonConstants,
|
|||
org.apache.dubbo.rpc.Constants,
|
||||
org.apache.dubbo.rpc.protocol.dubbo.Constants,
|
||||
org.apache.dubbo.common.serialize.Constants,
|
||||
org.apache.dubbo.configcenter.Constants,
|
||||
org.apache.dubbo.common.config.configcenter.Constants,
|
||||
org.apache.dubbo.metadata.support.Constants,
|
||||
org.apache.dubbo.rpc.protocol.rest.Constants,
|
||||
org.apache.dubbo.registry.Constants {
|
||||
|
|
|
|||
|
|
@ -66,12 +66,6 @@
|
|||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-metadata</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- FIXME, we shouldn't rely on these modules, even in test scope -->
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
|
|
|
|||
|
|
@ -114,9 +114,6 @@ public abstract class AbstractConfig implements Serializable {
|
|||
LEGACY_PROPERTIES.put("dubbo.consumer.retries", "dubbo.service.max.retry.providers");
|
||||
LEGACY_PROPERTIES.put("dubbo.consumer.check", "dubbo.service.allow.no.provider");
|
||||
LEGACY_PROPERTIES.put("dubbo.service.url", "dubbo.service.address");
|
||||
|
||||
// this is only for compatibility
|
||||
DubboShutdownHook.getDubboShutdownHook().register();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -19,8 +19,6 @@ package org.apache.dubbo.config;
|
|||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.URLBuilder;
|
||||
import org.apache.dubbo.common.Version;
|
||||
import org.apache.dubbo.common.config.Environment;
|
||||
import org.apache.dubbo.common.extension.ExtensionLoader;
|
||||
import org.apache.dubbo.common.utils.Assert;
|
||||
import org.apache.dubbo.common.utils.CollectionUtils;
|
||||
import org.apache.dubbo.common.utils.ConfigUtils;
|
||||
|
|
@ -30,9 +28,6 @@ import org.apache.dubbo.common.utils.StringUtils;
|
|||
import org.apache.dubbo.common.utils.UrlUtils;
|
||||
import org.apache.dubbo.config.context.ConfigManager;
|
||||
import org.apache.dubbo.config.support.Parameter;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.configcenter.DynamicConfigurationFactory;
|
||||
import org.apache.dubbo.metadata.integration.MetadataReportService;
|
||||
import org.apache.dubbo.monitor.MonitorFactory;
|
||||
import org.apache.dubbo.monitor.MonitorService;
|
||||
import org.apache.dubbo.registry.RegistryService;
|
||||
|
|
@ -43,19 +38,14 @@ import org.apache.dubbo.rpc.cluster.Cluster;
|
|||
import org.apache.dubbo.rpc.model.ApplicationModel;
|
||||
import org.apache.dubbo.rpc.support.MockInvoker;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.apache.dubbo.common.config.ConfigurationUtils.parseProperties;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SEPARATOR;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_PROTOCOL;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.FILE_KEY;
|
||||
|
|
@ -73,7 +63,6 @@ import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoad
|
|||
import static org.apache.dubbo.config.Constants.DUBBO_IP_TO_REGISTRY;
|
||||
import static org.apache.dubbo.config.Constants.LAYER_KEY;
|
||||
import static org.apache.dubbo.config.Constants.LISTENER_KEY;
|
||||
import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX;
|
||||
import static org.apache.dubbo.monitor.Constants.LOGSTAT_PROTOCOL;
|
||||
import static org.apache.dubbo.registry.Constants.REGISTER_IP_KEY;
|
||||
import static org.apache.dubbo.registry.Constants.REGISTER_KEY;
|
||||
|
|
@ -203,8 +192,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
|
|||
"The registry config is: " + registryConfig);
|
||||
}
|
||||
}
|
||||
|
||||
useRegistryForConfigIfNecessary();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
|
|
@ -267,55 +254,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void startConfigCenter() {
|
||||
if (configCenter == null) {
|
||||
ConfigManager.getInstance().getConfigCenter().ifPresent(cc -> this.configCenter = cc);
|
||||
}
|
||||
|
||||
if (this.configCenter != null) {
|
||||
// TODO there may have duplicate refresh
|
||||
this.configCenter.refresh();
|
||||
prepareEnvironment();
|
||||
}
|
||||
ConfigManager.getInstance().refreshAll();
|
||||
}
|
||||
|
||||
private void prepareEnvironment() {
|
||||
if (configCenter.isValid()) {
|
||||
if (!configCenter.checkOrUpdateInited()) {
|
||||
return;
|
||||
}
|
||||
DynamicConfiguration dynamicConfiguration = getDynamicConfiguration(configCenter.toUrl());
|
||||
String configContent = dynamicConfiguration.getConfigs(configCenter.getConfigFile(), configCenter.getGroup());
|
||||
|
||||
String appGroup = application != null ? application.getName() : null;
|
||||
String appConfigContent = null;
|
||||
if (StringUtils.isNotEmpty(appGroup)) {
|
||||
appConfigContent = dynamicConfiguration.getConfigs
|
||||
(StringUtils.isNotEmpty(configCenter.getAppConfigFile()) ? configCenter.getAppConfigFile() : configCenter.getConfigFile(),
|
||||
appGroup
|
||||
);
|
||||
}
|
||||
try {
|
||||
Environment.getInstance().setConfigCenterFirst(configCenter.isHighestPriority());
|
||||
Environment.getInstance().updateExternalConfigurationMap(parseProperties(configContent));
|
||||
Environment.getInstance().updateAppExternalConfigurationMap(parseProperties(appConfigContent));
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException("Failed to parse configurations from Config Center.", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private DynamicConfiguration getDynamicConfiguration(URL url) {
|
||||
DynamicConfigurationFactory factories = ExtensionLoader
|
||||
.getExtensionLoader(DynamicConfigurationFactory.class)
|
||||
.getExtension(url.getProtocol());
|
||||
DynamicConfiguration configuration = factories.getDynamicConfiguration(url);
|
||||
Environment.getInstance().setDynamicConfiguration(configuration);
|
||||
return configuration;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Load the registry and conversion it to {@link URL}, the priority order is: system property > dubbo registry config
|
||||
|
|
@ -415,24 +353,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
|
|||
}
|
||||
}
|
||||
|
||||
private URL loadMetadataReporterURL() {
|
||||
String address = metadataReportConfig.getAddress();
|
||||
if (StringUtils.isEmpty(address)) {
|
||||
return null;
|
||||
}
|
||||
Map<String, String> map = new HashMap<String, String>();
|
||||
appendParameters(map, metadataReportConfig);
|
||||
return UrlUtils.parseURL(address, map);
|
||||
}
|
||||
|
||||
protected MetadataReportService getMetadataReportService() {
|
||||
|
||||
if (metadataReportConfig == null || !metadataReportConfig.isValid()) {
|
||||
return null;
|
||||
}
|
||||
return MetadataReportService.instance(this::loadMetadataReporterURL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the remote service interface and the methods meet with Dubbo's requirements.it mainly check, if the
|
||||
* methods configured in the configuration file are included in the interface of remote service
|
||||
|
|
@ -544,16 +464,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
|
|||
}
|
||||
|
||||
private void convertRegistryIdsToRegistries() {
|
||||
if (StringUtils.isEmpty(registryIds) && CollectionUtils.isEmpty(registries)) {
|
||||
Set<String> configedRegistries = new HashSet<>();
|
||||
configedRegistries.addAll(getSubProperties(Environment.getInstance().getExternalConfigurationMap(),
|
||||
REGISTRIES_SUFFIX));
|
||||
configedRegistries.addAll(getSubProperties(Environment.getInstance().getAppExternalConfigurationMap(),
|
||||
REGISTRIES_SUFFIX));
|
||||
|
||||
registryIds = String.join(COMMA_SEPARATOR, configedRegistries);
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(registryIds)) {
|
||||
if (CollectionUtils.isEmpty(registries)) {
|
||||
setRegistries(
|
||||
|
|
@ -571,12 +481,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
|
|||
List<RegistryConfig> tmpRegistries = CollectionUtils.isNotEmpty(registries) ? registries : new ArrayList<>();
|
||||
Arrays.stream(ids).forEach(id -> {
|
||||
if (tmpRegistries.stream().noneMatch(reg -> reg.getId().equals(id))) {
|
||||
tmpRegistries.add(ConfigManager.getInstance().getRegistry(id).orElseGet(() -> {
|
||||
RegistryConfig registryConfig = new RegistryConfig();
|
||||
registryConfig.setId(id);
|
||||
registryConfig.refresh();
|
||||
return registryConfig;
|
||||
}));
|
||||
ConfigManager.getInstance().getRegistry(id).ifPresent(tmpRegistries::add);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -609,26 +514,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* For compatibility purpose, use registry as the default config center if the registry protocol is zookeeper and
|
||||
* there's no config center specified explicitly.
|
||||
*/
|
||||
private void useRegistryForConfigIfNecessary() {
|
||||
registries.stream().filter(RegistryConfig::isZookeeperProtocol).findFirst().ifPresent(rc -> {
|
||||
// we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
|
||||
Environment.getInstance().getDynamicConfiguration().orElseGet(() -> {
|
||||
ConfigManager configManager = ConfigManager.getInstance();
|
||||
ConfigCenterConfig cc = configManager.getConfigCenter().orElse(new ConfigCenterConfig());
|
||||
cc.setProtocol(rc.getProtocol());
|
||||
cc.setAddress(rc.getAddress());
|
||||
cc.setHighestPriority(false);
|
||||
setConfigCenter(cc);
|
||||
startConfigCenter();
|
||||
return null;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @return local
|
||||
* @deprecated Replace to <code>getStub()</code>
|
||||
|
|
@ -783,7 +668,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
|
|||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
public void setRegistries(List<? extends RegistryConfig> registries) {
|
||||
ConfigManager.getInstance().addRegistries((List<RegistryConfig>) registries);
|
||||
ConfigManager.getInstance().addRegistries((List<RegistryConfig>) registries, false);
|
||||
this.registries = (List<RegistryConfig>) registries;
|
||||
}
|
||||
|
||||
|
|
@ -823,7 +708,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
|
|||
}
|
||||
|
||||
public void setConfigCenter(ConfigCenterConfig configCenter) {
|
||||
ConfigManager.getInstance().setConfigCenter(configCenter);
|
||||
ConfigManager.getInstance().addConfigCenter(configCenter);
|
||||
this.configCenter = configCenter;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import java.util.List;
|
|||
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
|
||||
import static org.apache.dubbo.rpc.Constants.SERVICE_FILTER_KEY;
|
||||
import static org.apache.dubbo.rpc.Constants.EXPORTER_LISTENER_KEY;
|
||||
import static org.apache.dubbo.rpc.Constants.SERVICE_FILTER_KEY;
|
||||
import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;
|
||||
|
||||
/**
|
||||
|
|
@ -206,7 +206,7 @@ public abstract class AbstractServiceConfig extends AbstractInterfaceConfig {
|
|||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
public void setProtocols(List<? extends ProtocolConfig> protocols) {
|
||||
ConfigManager.getInstance().addProtocols((List<ProtocolConfig>) protocols);
|
||||
ConfigManager.getInstance().addProtocols((List<ProtocolConfig>) protocols, false);
|
||||
this.protocols = (List<ProtocolConfig>) protocols;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -137,6 +137,11 @@ public class ApplicationConfig extends AbstractConfig {
|
|||
*/
|
||||
private String shutwait;
|
||||
|
||||
/**
|
||||
* Metadata type, local or remote, if choose remote, you need to further specify metadata center.
|
||||
*/
|
||||
private String metadata;
|
||||
|
||||
public ApplicationConfig() {
|
||||
}
|
||||
|
||||
|
|
@ -374,4 +379,11 @@ public class ApplicationConfig extends AbstractConfig {
|
|||
return !StringUtils.isEmpty(name);
|
||||
}
|
||||
|
||||
public String getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
public void setMetadata(String metadata) {
|
||||
this.metadata = metadata;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,17 +26,17 @@ import org.apache.dubbo.config.support.Parameter;
|
|||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_CHECK_KEY;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_CLUSTER_KEY;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_GROUP_KEY;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_CHECK_KEY;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_CLUSTER_KEY;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_GROUP_KEY;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.config.Constants.ZOOKEEPER_PROTOCOL;
|
||||
import static org.apache.dubbo.config.Constants.CONFIG_CONFIGFILE_KEY;
|
||||
import static org.apache.dubbo.config.Constants.CONFIG_ENABLE_KEY;
|
||||
import static org.apache.dubbo.config.Constants.CONFIG_TIMEOUT_KEY;
|
||||
import static org.apache.dubbo.config.Constants.ZOOKEEPER_PROTOCOL;
|
||||
|
||||
/**
|
||||
* ConfigCenterConfig
|
||||
|
|
|
|||
|
|
@ -16,9 +16,12 @@
|
|||
*/
|
||||
package org.apache.dubbo.config;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.common.utils.UrlUtils;
|
||||
import org.apache.dubbo.config.support.Parameter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
|
||||
|
|
@ -83,6 +86,16 @@ public class MetadataReportConfig extends AbstractConfig {
|
|||
setAddress(address);
|
||||
}
|
||||
|
||||
public URL toUrl() {
|
||||
String address = this.getAddress();
|
||||
if (StringUtils.isEmpty(address)) {
|
||||
return null;
|
||||
}
|
||||
Map<String, String> map = new HashMap<String, String>();
|
||||
appendParameters(map, this);
|
||||
return UrlUtils.parseURL(address, map);
|
||||
}
|
||||
|
||||
@Parameter(excluded = true)
|
||||
public String getAddress() {
|
||||
return address;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ import org.apache.dubbo.config.event.ReferenceConfigInitializedEvent;
|
|||
import org.apache.dubbo.config.support.Parameter;
|
||||
import org.apache.dubbo.event.Event;
|
||||
import org.apache.dubbo.event.EventDispatcher;
|
||||
import org.apache.dubbo.metadata.integration.MetadataReportService;
|
||||
import org.apache.dubbo.metadata.WritableMetadataService;
|
||||
import org.apache.dubbo.remoting.Constants;
|
||||
import org.apache.dubbo.rpc.Invoker;
|
||||
import org.apache.dubbo.rpc.Protocol;
|
||||
|
|
@ -66,6 +66,8 @@ import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;
|
|||
import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.LOCALHOST_VALUE;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.METADATA_DEFAULT;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.METADATA_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.MONITOR_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.REVISION_KEY;
|
||||
|
|
@ -228,7 +230,6 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
|
|||
throw new IllegalStateException("<dubbo:reference interface=\"\" /> interface not allow null!");
|
||||
}
|
||||
completeCompoundConfigs();
|
||||
startConfigCenter();
|
||||
// get consumer's global configuration
|
||||
checkDefault();
|
||||
this.refresh();
|
||||
|
|
@ -340,10 +341,11 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
|
|||
}
|
||||
map.put(REGISTER_IP_KEY, hostToRegistry);
|
||||
|
||||
ref = createProxy(map);
|
||||
|
||||
String serviceKey = URL.buildKey(interfaceName, group, version);
|
||||
ApplicationModel.initConsumerModel(serviceKey, buildConsumerModel(serviceKey, attributes));
|
||||
ref = createProxy(map);
|
||||
ApplicationModel.getConsumerModel(serviceKey).setProxyObject(ref);
|
||||
|
||||
initialized = true;
|
||||
|
||||
// dispatch a ReferenceConfigInitializedEvent since 2.7.3
|
||||
|
|
@ -441,10 +443,11 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
|
|||
* @since 2.7.0
|
||||
* ServiceData Store
|
||||
*/
|
||||
MetadataReportService metadataReportService = null;
|
||||
if ((metadataReportService = getMetadataReportService()) != null) {
|
||||
String metadata = map.get(METADATA_KEY);
|
||||
WritableMetadataService metadataService = WritableMetadataService.getExtension(metadata == null ? METADATA_DEFAULT : metadata);
|
||||
if (metadataService != null) {
|
||||
URL consumerURL = new URL(CONSUMER_PROTOCOL, map.remove(REGISTER_IP_KEY), 0, map.get(INTERFACE_KEY), map);
|
||||
metadataReportService.publishConsumer(consumerURL);
|
||||
metadataService.publishServiceDefinition(consumerURL);
|
||||
}
|
||||
// create service proxy
|
||||
return (T) PROXY_FACTORY.getProxy(invoker);
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import org.apache.dubbo.common.URL;
|
|||
import org.apache.dubbo.common.URLBuilder;
|
||||
import org.apache.dubbo.common.Version;
|
||||
import org.apache.dubbo.common.bytecode.Wrapper;
|
||||
import org.apache.dubbo.common.config.Environment;
|
||||
import org.apache.dubbo.common.extension.ExtensionLoader;
|
||||
import org.apache.dubbo.common.utils.ClassUtils;
|
||||
import org.apache.dubbo.common.utils.CollectionUtils;
|
||||
|
|
@ -36,7 +35,7 @@ import org.apache.dubbo.config.invoker.DelegateProviderMetaDataInvoker;
|
|||
import org.apache.dubbo.config.support.Parameter;
|
||||
import org.apache.dubbo.event.Event;
|
||||
import org.apache.dubbo.event.EventDispatcher;
|
||||
import org.apache.dubbo.metadata.integration.MetadataReportService;
|
||||
import org.apache.dubbo.metadata.WritableMetadataService;
|
||||
import org.apache.dubbo.remoting.Constants;
|
||||
import org.apache.dubbo.rpc.Exporter;
|
||||
import org.apache.dubbo.rpc.Invoker;
|
||||
|
|
@ -72,6 +71,8 @@ import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATT
|
|||
import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_IP_TO_BIND;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.LOCALHOST_VALUE;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.METADATA_DEFAULT;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.METADATA_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.MONITOR_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;
|
||||
|
|
@ -87,7 +88,6 @@ import static org.apache.dubbo.config.Constants.DUBBO_IP_TO_REGISTRY;
|
|||
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.MULTICAST;
|
||||
import static org.apache.dubbo.config.Constants.PROTOCOLS_SUFFIX;
|
||||
import static org.apache.dubbo.config.Constants.SCOPE_NONE;
|
||||
import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;
|
||||
import static org.apache.dubbo.rpc.Constants.LOCAL_PROTOCOL;
|
||||
|
|
@ -301,10 +301,8 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
|
|||
}
|
||||
|
||||
public void checkAndUpdateSubConfigs() {
|
||||
// Use default configs defined explicitly on global configs
|
||||
// Use default configs defined explicitly on global scope
|
||||
completeCompoundConfigs();
|
||||
// Config Center should always being started first.
|
||||
startConfigCenter();
|
||||
checkDefault();
|
||||
checkProtocol();
|
||||
checkApplication();
|
||||
|
|
@ -635,9 +633,9 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
|
|||
* @since 2.7.0
|
||||
* ServiceData Store
|
||||
*/
|
||||
MetadataReportService metadataReportService = null;
|
||||
if ((metadataReportService = getMetadataReportService()) != null) {
|
||||
metadataReportService.publishProvider(url);
|
||||
WritableMetadataService metadataService = WritableMetadataService.getExtension(url.getParameter(METADATA_KEY, METADATA_DEFAULT));
|
||||
if (metadataService != null) {
|
||||
metadataService.publishServiceDefinition(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -882,16 +880,6 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
|
|||
}
|
||||
|
||||
private void convertProtocolIdsToProtocols() {
|
||||
if (StringUtils.isEmpty(protocolIds) && CollectionUtils.isEmpty(protocols)) {
|
||||
List<String> configedProtocols = new ArrayList<>();
|
||||
configedProtocols.addAll(getSubProperties(Environment.getInstance()
|
||||
.getExternalConfigurationMap(), PROTOCOLS_SUFFIX));
|
||||
configedProtocols.addAll(getSubProperties(Environment.getInstance()
|
||||
.getAppExternalConfigurationMap(), PROTOCOLS_SUFFIX));
|
||||
|
||||
protocolIds = String.join(",", configedProtocols);
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(protocolIds)) {
|
||||
if (CollectionUtils.isEmpty(protocols)) {
|
||||
setProtocols(
|
||||
|
|
@ -909,12 +897,7 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
|
|||
List<ProtocolConfig> tmpProtocols = CollectionUtils.isNotEmpty(protocols) ? protocols : new ArrayList<>();
|
||||
Arrays.stream(arr).forEach(id -> {
|
||||
if (tmpProtocols.stream().noneMatch(prot -> prot.getId().equals(id))) {
|
||||
tmpProtocols.add(ConfigManager.getInstance().getProtocol(id).orElseGet(() -> {
|
||||
ProtocolConfig protocolConfig = new ProtocolConfig();
|
||||
protocolConfig.setId(id);
|
||||
protocolConfig.refresh();
|
||||
return protocolConfig;
|
||||
}));
|
||||
ConfigManager.getInstance().getProtocol(id).ifPresent(tmpProtocols::add);
|
||||
}
|
||||
});
|
||||
if (tmpProtocols.size() > arr.length) {
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import static org.apache.dubbo.config.Constants.PRODUCTION_ENVIRONMENT;
|
|||
*/
|
||||
public class ApplicationBuilder extends AbstractBuilder<ApplicationConfig, ApplicationBuilder> {
|
||||
private String name;
|
||||
private String metadata;
|
||||
private String version;
|
||||
private String owner;
|
||||
private String organization;
|
||||
|
|
@ -51,11 +52,20 @@ public class ApplicationBuilder extends AbstractBuilder<ApplicationConfig, Appli
|
|||
private Map<String, String> parameters;
|
||||
private String shutwait;
|
||||
|
||||
public static ApplicationBuilder newBuilder() {
|
||||
return new ApplicationBuilder();
|
||||
}
|
||||
|
||||
public ApplicationBuilder name(String name) {
|
||||
this.name = name;
|
||||
return getThis();
|
||||
}
|
||||
|
||||
public ApplicationBuilder metadata(String metadata) {
|
||||
this.metadata = metadata;
|
||||
return getThis();
|
||||
}
|
||||
|
||||
public ApplicationBuilder version(String version) {
|
||||
this.version = version;
|
||||
return getThis();
|
||||
|
|
@ -167,6 +177,7 @@ public class ApplicationBuilder extends AbstractBuilder<ApplicationConfig, Appli
|
|||
super.build(config);
|
||||
|
||||
config.setName(name);
|
||||
config.setMetadata(metadata);
|
||||
config.setVersion(this.version);
|
||||
config.setOwner(this.owner);
|
||||
config.setOrganization(this.organization);
|
||||
|
|
|
|||
|
|
@ -60,6 +60,10 @@ public class MetadataReportBuilder extends AbstractBuilder<MetadataReportConfig,
|
|||
*/
|
||||
private Boolean syncReport;
|
||||
|
||||
public static MetadataReportBuilder newBuilder() {
|
||||
return new MetadataReportBuilder();
|
||||
}
|
||||
|
||||
public MetadataReportBuilder address(String address) {
|
||||
this.address = address;
|
||||
return getThis();
|
||||
|
|
|
|||
|
|
@ -185,6 +185,10 @@ public class ProtocolBuilder extends AbstractBuilder<ProtocolConfig, ProtocolBui
|
|||
*/
|
||||
private Boolean isDefault;
|
||||
|
||||
public static ProtocolBuilder newBuilder() {
|
||||
return new ProtocolBuilder();
|
||||
}
|
||||
|
||||
public ProtocolBuilder id(String id) {
|
||||
return super.id(id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@ public class ReferenceBuilder<T> extends AbstractReferenceBuilder<ReferenceConfi
|
|||
*/
|
||||
private String protocol;
|
||||
|
||||
public static ReferenceBuilder newBuilder() {
|
||||
return new ReferenceBuilder();
|
||||
}
|
||||
|
||||
public ReferenceBuilder<T> id(String id) {
|
||||
return super.id(id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,6 +134,10 @@ public class RegistryBuilder extends AbstractBuilder<RegistryConfig, RegistryBui
|
|||
*/
|
||||
private String extraKeys;
|
||||
|
||||
public static RegistryBuilder newBuilder() {
|
||||
return new RegistryBuilder();
|
||||
}
|
||||
|
||||
public RegistryBuilder id(String id) {
|
||||
return super.id(id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,10 @@ public class ServiceBuilder<U> extends AbstractServiceBuilder<ServiceConfig, Ser
|
|||
*/
|
||||
private String generic;
|
||||
|
||||
public static ServiceBuilder newBuilder() {
|
||||
return new ServiceBuilder();
|
||||
}
|
||||
|
||||
public ServiceBuilder id(String id) {
|
||||
return super.id(id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,26 +16,36 @@
|
|||
*/
|
||||
package org.apache.dubbo.config.context;
|
||||
|
||||
import org.apache.dubbo.common.config.Environment;
|
||||
import org.apache.dubbo.common.logger.Logger;
|
||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||
import org.apache.dubbo.common.utils.CollectionUtils;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.config.AbstractConfig;
|
||||
import org.apache.dubbo.config.ApplicationConfig;
|
||||
import org.apache.dubbo.config.ConfigCenterConfig;
|
||||
import org.apache.dubbo.config.ConsumerConfig;
|
||||
import org.apache.dubbo.config.MetadataReportConfig;
|
||||
import org.apache.dubbo.config.ModuleConfig;
|
||||
import org.apache.dubbo.config.MonitorConfig;
|
||||
import org.apache.dubbo.config.ProtocolConfig;
|
||||
import org.apache.dubbo.config.ProviderConfig;
|
||||
import org.apache.dubbo.config.ReferenceConfig;
|
||||
import org.apache.dubbo.config.RegistryConfig;
|
||||
import org.apache.dubbo.config.ServiceConfig;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;
|
||||
import static org.apache.dubbo.config.Constants.PROTOCOLS_SUFFIX;
|
||||
import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
|
|
@ -78,13 +88,23 @@ public class ConfigManager {
|
|||
private ApplicationConfig application;
|
||||
private MonitorConfig monitor;
|
||||
private ModuleConfig module;
|
||||
private ConfigCenterConfig configCenter;
|
||||
|
||||
private Map<String, ProtocolConfig> protocols = new ConcurrentHashMap<>();
|
||||
private Map<String, RegistryConfig> registries = new ConcurrentHashMap<>();
|
||||
private Map<String, ProviderConfig> providers = new ConcurrentHashMap<>();
|
||||
private Map<String, ConsumerConfig> consumers = new ConcurrentHashMap<>();
|
||||
|
||||
private List<ProtocolConfig> defaultProtocols = new ArrayList<>();
|
||||
private List<RegistryConfig> defaultRegistries = new ArrayList<>();
|
||||
|
||||
private Set<ConfigCenterConfig> configCenters = new HashSet<>();
|
||||
private Set<MetadataReportConfig> metadataConfigs = new HashSet<>();
|
||||
private Set<String> registryIds = new HashSet<>();
|
||||
private Set<String> protocolIds = new HashSet<>();
|
||||
|
||||
private List<ServiceConfig<?>> serviceConfigs = new ArrayList<>();
|
||||
private List<ReferenceConfig<?>> referenceConfigs = new ArrayList<>();
|
||||
|
||||
public static ConfigManager getInstance() {
|
||||
return CONFIG_MANAGER;
|
||||
}
|
||||
|
|
@ -126,14 +146,35 @@ public class ConfigManager {
|
|||
}
|
||||
}
|
||||
|
||||
public Optional<ConfigCenterConfig> getConfigCenter() {
|
||||
return Optional.ofNullable(configCenter);
|
||||
public Set<ConfigCenterConfig> getConfigCenters() {
|
||||
return configCenters;
|
||||
}
|
||||
|
||||
public void setConfigCenter(ConfigCenterConfig configCenter) {
|
||||
if (configCenter != null) {
|
||||
checkDuplicate(this.configCenter, configCenter);
|
||||
this.configCenter = configCenter;
|
||||
public void addConfigCenter(ConfigCenterConfig configCenter) {
|
||||
if (configCenter != null && !configCenters.contains(configCenter)) {
|
||||
this.configCenters.add(configCenter);
|
||||
}
|
||||
}
|
||||
|
||||
public void addConfigCenter(List<ConfigCenterConfig> configCenters) {
|
||||
if (CollectionUtils.isNotEmpty(configCenters)) {
|
||||
this.configCenters.addAll(configCenters);
|
||||
}
|
||||
}
|
||||
|
||||
public Set<MetadataReportConfig> getMetadataConfigs() {
|
||||
return metadataConfigs;
|
||||
}
|
||||
|
||||
public void addMetadataReport(MetadataReportConfig metadataReportConfig) {
|
||||
if (metadataReportConfig != null && !metadataConfigs.contains(metadataReportConfig)) {
|
||||
this.metadataConfigs.add(metadataReportConfig);
|
||||
}
|
||||
}
|
||||
|
||||
public void addMetadataReport(List<MetadataReportConfig> metadataReportConfigs) {
|
||||
if (CollectionUtils.isNotEmpty(metadataReportConfigs)) {
|
||||
this.metadataConfigs.addAll(metadataReportConfigs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -200,31 +241,28 @@ public class ConfigManager {
|
|||
}
|
||||
|
||||
public Optional<List<ProtocolConfig>> getDefaultProtocols() {
|
||||
List<ProtocolConfig> defaults = new ArrayList<>();
|
||||
protocols.forEach((k, v) -> {
|
||||
if (DEFAULT_KEY.equalsIgnoreCase(k)) {
|
||||
defaults.add(v);
|
||||
} else if (v.isDefault() == null || v.isDefault()) {
|
||||
defaults.add(v);
|
||||
}
|
||||
});
|
||||
return Optional.of(defaults);
|
||||
return Optional.of(defaultProtocols);
|
||||
}
|
||||
|
||||
public void addProtocols(List<ProtocolConfig> protocolConfigs) {
|
||||
public void addProtocols(List<ProtocolConfig> protocolConfigs, boolean canBeDefault) {
|
||||
if (protocolConfigs != null) {
|
||||
protocolConfigs.forEach(this::addProtocol);
|
||||
protocolConfigs.forEach(pc -> this.addProtocol(pc, canBeDefault));
|
||||
}
|
||||
}
|
||||
|
||||
public void addProtocol(ProtocolConfig protocolConfig) {
|
||||
public void addProtocol(ProtocolConfig protocolConfig, boolean canBeDefault) {
|
||||
if (protocolConfig == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if isDefault is not false and a ProtocolConfig is not specified being false.
|
||||
if (canBeDefault && (protocolConfig.isDefault() == null || protocolConfig.isDefault())) {
|
||||
this.defaultProtocols.add(protocolConfig);
|
||||
}
|
||||
|
||||
String key = StringUtils.isNotEmpty(protocolConfig.getId())
|
||||
? protocolConfig.getId()
|
||||
: (protocolConfig.isDefault() == null || protocolConfig.isDefault()) ? DEFAULT_KEY : null;
|
||||
: DEFAULT_KEY;
|
||||
|
||||
if (StringUtils.isEmpty(key)) {
|
||||
throw new IllegalStateException("A ProtocolConfig should either has an id or it's the default one, " + protocolConfig);
|
||||
|
|
@ -243,31 +281,26 @@ public class ConfigManager {
|
|||
}
|
||||
|
||||
public Optional<List<RegistryConfig>> getDefaultRegistries() {
|
||||
List<RegistryConfig> defaults = new ArrayList<>();
|
||||
registries.forEach((k, v) -> {
|
||||
if (DEFAULT_KEY.equalsIgnoreCase(k)) {
|
||||
defaults.add(v);
|
||||
} else if (v.isDefault() == null || v.isDefault()) {
|
||||
defaults.add(v);
|
||||
}
|
||||
});
|
||||
return Optional.of(defaults);
|
||||
return Optional.of(defaultRegistries);
|
||||
}
|
||||
|
||||
public void addRegistries(List<RegistryConfig> registryConfigs) {
|
||||
public void addRegistries(List<RegistryConfig> registryConfigs, boolean canBeDefault) {
|
||||
if (registryConfigs != null) {
|
||||
registryConfigs.forEach(this::addRegistry);
|
||||
registryConfigs.forEach(rc -> this.addRegistry(rc, canBeDefault));
|
||||
}
|
||||
}
|
||||
|
||||
public void addRegistry(RegistryConfig registryConfig) {
|
||||
public void addRegistry(RegistryConfig registryConfig, boolean canBeDefault) {
|
||||
if (registryConfig == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (canBeDefault && (registryConfig.isDefault() == null || registryConfig.isDefault())) {
|
||||
this.defaultRegistries.add(registryConfig);
|
||||
}
|
||||
String key = StringUtils.isNotEmpty(registryConfig.getId())
|
||||
? registryConfig.getId()
|
||||
: (registryConfig.isDefault() == null || registryConfig.isDefault()) ? DEFAULT_KEY : null;
|
||||
: DEFAULT_KEY;
|
||||
|
||||
if (StringUtils.isEmpty(key)) {
|
||||
throw new IllegalStateException("A RegistryConfig should either has an id or it's the default one, " + registryConfig);
|
||||
|
|
@ -281,6 +314,51 @@ public class ConfigManager {
|
|||
}
|
||||
}
|
||||
|
||||
public void addProtocolIds(List<String> protocolIds) {
|
||||
this.protocolIds.addAll(protocolIds);
|
||||
}
|
||||
|
||||
public void addRegistryIds(List<String> registryIds) {
|
||||
this.registryIds.addAll(registryIds);
|
||||
}
|
||||
|
||||
public void addService(ServiceConfig<?> serviceConfig) {
|
||||
this.serviceConfigs.add(serviceConfig);
|
||||
}
|
||||
|
||||
public void addReference(ReferenceConfig<?> referenceConfig) {
|
||||
this.referenceConfigs.add(referenceConfig);
|
||||
}
|
||||
|
||||
public Set<String> getRegistryIds() {
|
||||
Set<String> configedRegistries = new HashSet<>();
|
||||
configedRegistries.addAll(getSubProperties(Environment.getInstance().getExternalConfigurationMap(),
|
||||
REGISTRIES_SUFFIX));
|
||||
configedRegistries.addAll(getSubProperties(Environment.getInstance().getAppExternalConfigurationMap(),
|
||||
REGISTRIES_SUFFIX));
|
||||
|
||||
configedRegistries.addAll(registryIds);
|
||||
return configedRegistries;
|
||||
}
|
||||
|
||||
public Set<String> getProtocolIds() {
|
||||
Set<String> configedProtocols = new HashSet<>();
|
||||
configedProtocols.addAll(getSubProperties(Environment.getInstance()
|
||||
.getExternalConfigurationMap(), PROTOCOLS_SUFFIX));
|
||||
configedProtocols.addAll(getSubProperties(Environment.getInstance()
|
||||
.getAppExternalConfigurationMap(), PROTOCOLS_SUFFIX));
|
||||
|
||||
configedProtocols.addAll(protocolIds);
|
||||
return configedProtocols;
|
||||
}
|
||||
|
||||
protected static Set<String> getSubProperties(Map<String, String> properties, String prefix) {
|
||||
return properties.keySet().stream().filter(k -> k.contains(prefix)).map(k -> {
|
||||
k = k.substring(prefix.length());
|
||||
return k.substring(0, k.indexOf("."));
|
||||
}).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public Map<String, ProtocolConfig> getProtocols() {
|
||||
return protocols;
|
||||
}
|
||||
|
|
@ -297,6 +375,14 @@ public class ConfigManager {
|
|||
return consumers;
|
||||
}
|
||||
|
||||
public List<ServiceConfig<?>> getServiceConfigs() {
|
||||
return serviceConfigs;
|
||||
}
|
||||
|
||||
public List<ReferenceConfig<?>> getReferenceConfigs() {
|
||||
return referenceConfigs;
|
||||
}
|
||||
|
||||
public void refreshAll() {
|
||||
// refresh all configs here,
|
||||
getApplication().ifPresent(ApplicationConfig::refresh);
|
||||
|
|
@ -319,13 +405,16 @@ public class ConfigManager {
|
|||
// For test purpose
|
||||
public void clear() {
|
||||
this.application = null;
|
||||
this.configCenter = null;
|
||||
this.monitor = null;
|
||||
this.module = null;
|
||||
this.registries.clear();
|
||||
this.protocols.clear();
|
||||
this.providers.clear();
|
||||
this.consumers.clear();
|
||||
this.configCenters.clear();
|
||||
this.metadataConfigs.clear();
|
||||
this.registryIds.clear();
|
||||
this.protocolIds.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@ import org.apache.dubbo.config.ProtocolConfig;
|
|||
import org.apache.dubbo.config.RegistryConfig;
|
||||
import org.apache.dubbo.config.ServiceConfig;
|
||||
import org.apache.dubbo.config.context.ConfigManager;
|
||||
import org.apache.dubbo.metadata.LocalMetadataService;
|
||||
import org.apache.dubbo.metadata.MetadataService;
|
||||
import org.apache.dubbo.metadata.MetadataServiceExporter;
|
||||
import org.apache.dubbo.metadata.WritableMetadataService;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
|
|
@ -79,7 +79,7 @@ public class ConfigurableMetadataServiceExporter implements MetadataServiceExpor
|
|||
|
||||
if (!isExported()) {
|
||||
|
||||
LocalMetadataService metadataService = LocalMetadataService.getDefaultExtension();
|
||||
WritableMetadataService metadataService = WritableMetadataService.getDefaultExtension();
|
||||
|
||||
ServiceConfig<MetadataService> serviceConfig = new ServiceConfig<>();
|
||||
serviceConfig.setApplication(applicationConfig);
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.protocol.dubbo.telnet;
|
||||
package org.apache.dubbo.config.telnet;
|
||||
|
||||
import org.apache.dubbo.common.extension.Activate;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
|
|
@ -0,0 +1 @@
|
|||
shutdown=org.apache.dubbo.rpc.protocol.dubbo.telnet.ShutdownTelnetHandler
|
||||
|
|
@ -49,9 +49,9 @@ public class ConfigurableMetadataServiceExporterTest {
|
|||
configManager.setApplication(applicationConfig);
|
||||
|
||||
// Add ProtocolConfig
|
||||
configManager.addProtocol(protocolConfig());
|
||||
configManager.addProtocol(protocolConfig(), true);
|
||||
// Add RegistryConfig
|
||||
configManager.addRegistry(registryConfig());
|
||||
configManager.addRegistry(registryConfig(), true);
|
||||
}
|
||||
|
||||
private static ProtocolConfig protocolConfig() {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.service;
|
||||
package org.apache.dubbo.config.service;
|
||||
|
||||
/**
|
||||
* DemoException
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.service;
|
||||
package org.apache.dubbo.config.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.service;
|
||||
package org.apache.dubbo.config.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.service;
|
||||
package org.apache.dubbo.config.service;
|
||||
|
||||
import org.apache.dubbo.common.beanutil.JavaBeanAccessor;
|
||||
import org.apache.dubbo.common.beanutil.JavaBeanDescriptor;
|
||||
|
|
@ -29,6 +29,8 @@ import org.apache.dubbo.config.ProtocolConfig;
|
|||
import org.apache.dubbo.config.ReferenceConfig;
|
||||
import org.apache.dubbo.config.RegistryConfig;
|
||||
import org.apache.dubbo.config.ServiceConfig;
|
||||
import org.apache.dubbo.rpc.service.GenericException;
|
||||
import org.apache.dubbo.rpc.service.GenericService;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
|
|
@ -42,8 +44,8 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_NATIVE_JAVA;
|
||||
import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_BEAN;
|
||||
import static org.apache.dubbo.rpc.Constants.GENERIC_SERIALIZATION_NATIVE_JAVA;
|
||||
|
||||
/**
|
||||
* GenericServiceTest
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.service;
|
||||
package org.apache.dubbo.config.service;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
|
@ -14,11 +14,12 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.protocol.dubbo.telnet;
|
||||
package org.apache.dubbo.config.telnet;
|
||||
|
||||
import org.apache.dubbo.remoting.Channel;
|
||||
import org.apache.dubbo.remoting.RemotingException;
|
||||
import org.apache.dubbo.remoting.telnet.TelnetHandler;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.validation;
|
||||
package org.apache.dubbo.config.validation;
|
||||
|
||||
import javax.validation.constraints.Future;
|
||||
import javax.validation.constraints.Max;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.validation;
|
||||
package org.apache.dubbo.config.validation;
|
||||
|
||||
import org.apache.dubbo.validation.MethodValidated;
|
||||
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.validation;
|
||||
package org.apache.dubbo.config.validation;
|
||||
|
||||
/**
|
||||
* ValidationServiceImpl
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.dubbo.rpc.validation;
|
||||
package org.apache.dubbo.config.validation;
|
||||
|
||||
import org.apache.dubbo.config.ApplicationConfig;
|
||||
import org.apache.dubbo.config.ProtocolConfig;
|
||||
|
|
@ -397,6 +397,11 @@
|
|||
<xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="metadata" type="xsd:string">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation><![CDATA[ The metadta type: local or remote. ]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
|
||||
</xsd:complexType>
|
||||
|
||||
|
|
|
|||
|
|
@ -392,6 +392,11 @@
|
|||
<xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="metadata" type="xsd:string">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation><![CDATA[ The metadta type: local or remote. ]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="moduleType">
|
||||
|
|
|
|||
|
|
@ -1,39 +0,0 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>${project.artifactId}</name>
|
||||
<description>The api definition of the service config-center module</description>
|
||||
<properties>
|
||||
<skip_maven_deploy>false</skip_maven_deploy>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-common</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
@ -1 +0,0 @@
|
|||
nop=org.apache.dubbo.configcenter.support.nop.NopDynamicConfigurationFactory
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
/*
|
||||
* 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.dubbo.configcenter.mock;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.extension.ExtensionLoader;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.configcenter.DynamicConfigurationFactory;
|
||||
import org.apache.dubbo.configcenter.support.nop.NopDynamicConfigurationFactory;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class AbstractDynamicConfigurationTest {
|
||||
public DynamicConfigurationFactory configurationFactory = ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getExtension("mock");
|
||||
public URL url = URL.valueOf("nop://127.0.0.1:10880/DynamicConfiguration");
|
||||
|
||||
@Test
|
||||
public void testInit() {
|
||||
DynamicConfiguration configuration1 = configurationFactory.getDynamicConfiguration(url);
|
||||
DynamicConfiguration configuration2 = configurationFactory.getDynamicConfiguration(url);
|
||||
Assertions.assertEquals(configuration1, configuration2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultExtension() {
|
||||
DynamicConfigurationFactory factory = ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getDefaultExtension();
|
||||
Assertions.assertTrue(factory instanceof NopDynamicConfigurationFactory);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* 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.dubbo.configcenter.mock;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class MockDynamicConfiguration implements DynamicConfiguration {
|
||||
public MockDynamicConfiguration(URL url) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getInternalProperty(String key) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(String key, String group, ConfigurationListener listener) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(String key, String group, ConfigurationListener listener) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConfig(String key, String group, long timeout) throws IllegalStateException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConfigs(String key, String group, long timeout) throws IllegalStateException {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
mock=org.apache.dubbo.configcenter.mock.MockDynamicConfigurationFactory
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<artifactId>dubbo-common</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -17,13 +17,13 @@
|
|||
package org.apache.dubbo.configcenter.support.apollo;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.logger.Logger;
|
||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
|
||||
import com.ctrip.framework.apollo.Config;
|
||||
import com.ctrip.framework.apollo.ConfigChangeListener;
|
||||
|
|
@ -42,12 +42,12 @@ import java.util.concurrent.ConcurrentMap;
|
|||
import java.util.concurrent.CopyOnWriteArraySet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_CHECK_KEY;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_CLUSTER_KEY;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_CHECK_KEY;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_CLUSTER_KEY;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
|
||||
/**
|
||||
* Apollo implementation, https://github.com/ctripcorp/apollo
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
package org.apache.dubbo.configcenter.support.apollo;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<artifactId>dubbo-common</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -18,14 +18,14 @@
|
|||
package org.apache.dubbo.configcenter.consul;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.logger.Logger;
|
||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||
import org.apache.dubbo.common.utils.NamedThreadFactory;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
|
||||
import com.ecwid.consul.v1.ConsulClient;
|
||||
import com.ecwid.consul.v1.QueryParams;
|
||||
|
|
@ -39,9 +39,9 @@ import java.util.concurrent.ConcurrentMap;
|
|||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import static java.util.concurrent.Executors.newCachedThreadPool;
|
||||
import static org.apache.dubbo.common.config.configcenter.ConfigChangeType.ADDED;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.configcenter.ConfigChangeType.ADDED;
|
||||
|
||||
/**
|
||||
* config center implementation for consul
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
package org.apache.dubbo.configcenter.consul;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
|
||||
/**
|
||||
* Config center factory for consul
|
||||
|
|
|
|||
|
|
@ -32,11 +32,6 @@
|
|||
<description>The etcd implementation of the config-center api</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.etcd</groupId>
|
||||
<artifactId>jetcd-launcher</artifactId>
|
||||
|
|
@ -47,6 +42,12 @@
|
|||
<artifactId>testcontainers</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-common</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-remoting-etcd3</artifactId>
|
||||
|
|
|
|||
|
|
@ -18,11 +18,11 @@
|
|||
package org.apache.dubbo.configcenter.support.etcd;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.remoting.etcd.StateListener;
|
||||
import org.apache.dubbo.remoting.etcd.jetcd.JEtcdClient;
|
||||
|
||||
|
|
@ -40,8 +40,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
|
||||
/**
|
||||
* The etcd implementation of {@link DynamicConfiguration}
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
package org.apache.dubbo.configcenter.support.etcd;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
|
||||
/**
|
||||
* The etcd implementation of {@link AbstractDynamicConfigurationFactory}
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
package org.apache.dubbo.configcenter.support.etcd;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
|
||||
import io.etcd.jetcd.ByteSequence;
|
||||
import io.etcd.jetcd.Client;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<artifactId>dubbo-common</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -18,13 +18,13 @@
|
|||
package org.apache.dubbo.configcenter.support.nacos;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.logger.Logger;
|
||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
|
||||
import com.alibaba.nacos.api.NacosFactory;
|
||||
import com.alibaba.nacos.api.config.ConfigService;
|
||||
|
|
@ -46,9 +46,9 @@ import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE;
|
|||
import static com.alibaba.nacos.api.PropertyKeyConst.SECRET_KEY;
|
||||
import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
|
||||
import static com.alibaba.nacos.client.naming.utils.UtilAndComs.NACOS_NAMING_LOG_NAME;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPERATOR;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.PROPERTIES_CHAR_SEPERATOR;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@
|
|||
package org.apache.dubbo.configcenter.support.nacos;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.constants.CommonConstants;
|
||||
import org.apache.dubbo.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
|
||||
import com.alibaba.nacos.api.PropertyKeyConst;
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
package org.apache.dubbo.configcenter.support.nacos;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<artifactId>dubbo-common</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@
|
|||
*/
|
||||
package org.apache.dubbo.configcenter.support.zookeeper;
|
||||
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.utils.CollectionUtils;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeType;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.remoting.zookeeper.DataListener;
|
||||
import org.apache.dubbo.remoting.zookeeper.EventType;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,10 +17,10 @@
|
|||
package org.apache.dubbo.configcenter.support.zookeeper;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.utils.NamedThreadFactory;
|
||||
import org.apache.dubbo.common.utils.StringUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.remoting.zookeeper.ZookeeperClient;
|
||||
import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
|
||||
|
||||
|
|
@ -36,8 +36,8 @@ import java.util.concurrent.Executors;
|
|||
|
||||
import static java.util.Collections.emptySortedSet;
|
||||
import static java.util.Collections.unmodifiableSortedSet;
|
||||
import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
import static org.apache.dubbo.common.utils.CollectionUtils.isEmpty;
|
||||
import static org.apache.dubbo.configcenter.Constants.CONFIG_NAMESPACE_KEY;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
package org.apache.dubbo.configcenter.support.zookeeper;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,12 +17,12 @@
|
|||
package org.apache.dubbo.configcenter.support.zookeeper;
|
||||
|
||||
import org.apache.dubbo.common.URL;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory;
|
||||
import org.apache.dubbo.common.extension.ExtensionLoader;
|
||||
import org.apache.dubbo.common.utils.NetUtils;
|
||||
import org.apache.dubbo.configcenter.ConfigChangeEvent;
|
||||
import org.apache.dubbo.configcenter.ConfigurationListener;
|
||||
import org.apache.dubbo.configcenter.DynamicConfiguration;
|
||||
import org.apache.dubbo.configcenter.DynamicConfigurationFactory;
|
||||
|
||||
import org.apache.curator.framework.CuratorFramework;
|
||||
import org.apache.curator.framework.CuratorFrameworkFactory;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
</properties>
|
||||
|
||||
<modules>
|
||||
<module>dubbo-configcenter-api</module>
|
||||
<module>dubbo-configcenter-zookeeper</module>
|
||||
<module>dubbo-configcenter-apollo</module>
|
||||
<module>dubbo-configcenter-consul</module>
|
||||
|
|
|
|||
|
|
@ -34,10 +34,5 @@
|
|||
<artifactId>dubbo-container-api</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-configcenter-api</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
@ -33,6 +33,11 @@
|
|||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-config-api</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-demo-interface</artifactId>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,11 @@
|
|||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-config-api</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-demo-interface</artifactId>
|
||||
|
|
|
|||
|
|
@ -1,38 +0,0 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>dubbo-metadata-report</artifactId>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>dubbo-metadata-definition</artifactId>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo-common</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue