Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dubbo cloud native #4904

Merged
merged 82 commits into from
Aug 21, 2019
Merged
Changes from 1 commit
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
f51b394
Polish apache/dubbo#4542 : [Enhancement] Adapt the Java standard Even…
mercyblitz Jul 11, 2019
9e58caa
Polish apache/dubbo#4541 : [Feature] Add local File System DynamicCon…
mercyblitz Jul 15, 2019
9252be1
Polish apache#4541 : Bugfix
mercyblitz Jul 15, 2019
08089b6
Polish apache/dubbo#4541 : Optimization
mercyblitz Jul 15, 2019
cdd9338
Polish apache/dubbo#4541 : Add the compatibility for PollingWatchServ…
mercyblitz Jul 16, 2019
f0408f7
Polish apache/dubbo#4541 : Add delay publish without ThreadPoolExecutor
mercyblitz Jul 16, 2019
5f354a0
Polish apache/dubbo#4541 : Refactor the extension name
mercyblitz Jul 17, 2019
8152a75
Polish apache/dubbo#4541 : Add remove ops
mercyblitz Jul 17, 2019
df1a258
Polish apache/dubbo#4541 : Add testable constructor
mercyblitz Jul 17, 2019
52c0205
Polish apache/dubbo#4541 : Add getConfigGroups method
mercyblitz Jul 17, 2019
293a70d
Polish apache/dubbo#4610 : [Refactor] Refactor the bootstrap module
mercyblitz Jul 20, 2019
3218a1f
Polish apache/dubbo#4541 : Fix the nulling URL issue
mercyblitz Jul 20, 2019
d5c78ac
Polish apache/dubbo#4622 : [Refactor] Refactor ConfigManager
mercyblitz Jul 25, 2019
1d54a1d
Polish apache/dubbo#4622 : [Refactor] Refactor ConfigManager
mercyblitz Jul 25, 2019
5071a04
Polish apache/dubbo#4622 : Support multiple configcenters
mercyblitz Jul 26, 2019
ccf614c
Polish apache/dubbo#4671 : ServiceNameMapping will not map the group,…
mercyblitz Jul 26, 2019
87e88e2
update referenceCount log (#4683)
haiyang1985 Jul 29, 2019
5d299af
Polish /apache/dubbo#4687 : Remove the duplicated test code in dubbo-…
mercyblitz Jul 29, 2019
25ec31e
#4685 修改代码if判断false问题 if (hasException == false)修改成if (!hasException…
smipo Jul 30, 2019
c3132b8
Fixed Service annotation method parameters are not in effect (#4598)
Leishunyu Jul 31, 2019
f490df8
keep demo simple, and switch to use zookeeper as registry center (#4705)
beiwei30 Jul 31, 2019
c8dbd7d
@Reference auto-wires the instance of generic interface #4594 (#4677)
CodingSinger Jul 31, 2019
65a0140
try to shorten maven output to make travis build pass (#4710)
beiwei30 Aug 1, 2019
5b38331
use CountDownLatch to check zk registry if establish connection (#4589)
tswstarplanet Aug 1, 2019
a646874
Minor change
mercyblitz Aug 1, 2019
b8e601a
Merge remote-tracking branch 'upstream/master' into dubbo-cloud-native
mercyblitz Aug 2, 2019
0644fe1
Rename the extension name of WritableMetadataService
mercyblitz Aug 5, 2019
9f405d7
Polish apache/dubbo#4759 : [Refactor] Change the signature of methods…
mercyblitz Aug 7, 2019
a344121
Merge remote-tracking branch 'upstream/master' into dubbo-cloud-native
mercyblitz Aug 7, 2019
8c7f37a
Polish apache/dubbo#3984 : Add the implementation of Page<ServiceInst…
mercyblitz Aug 7, 2019
2a88323
Code merge
mercyblitz Aug 7, 2019
240c456
Code merge
mercyblitz Aug 8, 2019
391d053
Fix the cases
mercyblitz Aug 8, 2019
3e57a0a
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 8, 2019
83fc425
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 8, 2019
a147829
Refactor ConfigManager
mercyblitz Aug 12, 2019
eea35ce
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 12, 2019
e307e98
Refactor ConfigManager
mercyblitz Aug 12, 2019
f84a33d
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 12, 2019
ad3e638
Resolve the issues on ConfigManager
mercyblitz Aug 12, 2019
19f1474
Resolve conflict
mercyblitz Aug 12, 2019
07cf7b1
Refactor and add test-cases for ConfigManager
mercyblitz Aug 13, 2019
b4bf6ba
Merge branch 'cloud-native' into dubbo-cloud-native
mercyblitz Aug 13, 2019
a7088ef
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 13, 2019
df9ff69
Merge remote-tracking branch 'origin/dubbo-cloud-native' into dubbo-c…
mercyblitz Aug 13, 2019
51d2be4
Polish apache/dubbo#4774 : [Feature] Dubbo Cloud Native - To Support …
mercyblitz Aug 13, 2019
c284dad
Polish apache/dubbo#4808 : [Feature] Add the registered/unregistered …
mercyblitz Aug 13, 2019
3d84c35
Polish apache/dubbo#4807 : [Feature] Add the callback mechanism Shutd…
mercyblitz Aug 13, 2019
21bcfaa
Polish apache/dubbo#4813 : [Feature] add Prioritized implementation f…
mercyblitz Aug 13, 2019
63a315c
Polish apache/dubbo#4815 : [Feature] Add the ServiceLoader for Dubbo'…
mercyblitz Aug 14, 2019
741321c
Polish apache/dubbo#4815 : [Feature] Add the ServiceLoader for Dubbo'…
mercyblitz Aug 14, 2019
70f9de2
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 14, 2019
16c77fc
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 14, 2019
d448ab6
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 14, 2019
1ac1ad7
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 15, 2019
f67d769
Polish apache/dubbo#4813 : [Feature] add Prioritized implementation f…
mercyblitz Aug 15, 2019
b286e1d
Polish apache/dubbo#4807 : Add sort implementation
mercyblitz Aug 15, 2019
9f6e79e
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 15, 2019
0bfda83
Refactor
mercyblitz Aug 15, 2019
b5da5da
Refactor
mercyblitz Aug 16, 2019
8a7f52b
Polish apache/dubbo#4845 : [Feature] Enhance the Event-Publishing fea…
mercyblitz Aug 16, 2019
4a43d0c
Merge branch 'cloud-native' into dubbo-cloud-native
mercyblitz Aug 16, 2019
f50eed8
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 16, 2019
c70f55b
Merge remote-tracking branch 'origin/dubbo-cloud-native' into dubbo-c…
mercyblitz Aug 16, 2019
176d56b
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 16, 2019
49de00e
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 16, 2019
147c477
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 16, 2019
3fb793a
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 16, 2019
39fca05
Polish apache/dubbo#4854 : [Feature] MetadataService supports the Dub…
mercyblitz Aug 16, 2019
1f749cf
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 16, 2019
4ef7e30
Polish apache/dubbo#4857 : [Enhancement] Sync the Metadata storage ty…
mercyblitz Aug 16, 2019
21af756
Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud…
mercyblitz Aug 16, 2019
64c3425
Polish apache/dubbo#4868 : [Enhancement] Refactor ConfigChangeEvent
mercyblitz Aug 19, 2019
940452e
Polish apache/dubbo#4868 : [Enhancement] Refactor ConfigChangeEvent
mercyblitz Aug 19, 2019
f676f5e
Polish apache/dubbo#4873 : [Feature] Add a conditional EventListener …
mercyblitz Aug 19, 2019
4356c52
Polish apache/dubbo#4875 : [Feature] Refactor ServiceInstancesChanged…
mercyblitz Aug 19, 2019
839c4c1
Remove the cycle dependencies
mercyblitz Aug 21, 2019
c30545c
Remove the cycle dependencies
mercyblitz Aug 21, 2019
193a751
Merge branch 'cloud-native' into dubbo-cloud-native
mercyblitz Aug 21, 2019
5ddf7b3
Polish apache/dubbo#4903 : [Feature] Set source into the BeanDefiniti…
mercyblitz Aug 21, 2019
2992d59
Merge remote-tracking branch 'origin/dubbo-cloud-native' into dubbo-c…
mercyblitz Aug 21, 2019
5b8b3f5
Polish apache/dubbo#4902 : [Feature] Dubbo Cloud Native to Spring XML…
mercyblitz Aug 21, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Polish #4622 : [Refactor] Refactor ConfigManager
mercyblitz committed Jul 25, 2019
commit d5c78ac5ca852b11b0e8a72f2ec7abd371f638ff
6 changes: 6 additions & 0 deletions dubbo-bootstrap/pom.xml
Original file line number Diff line number Diff line change
@@ -90,6 +90,12 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-test</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -59,6 +59,7 @@

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -149,7 +150,7 @@ public DubboBootstrap metadataReport(MetadataReportConfig metadataReportConfig)
}

public DubboBootstrap metadataReport(List<MetadataReportConfig> metadataReportConfigs) {
configManager.addMetadataReport(metadataReportConfigs);
configManager.addMetadataReports(metadataReportConfigs);
return this;
}

@@ -193,22 +194,48 @@ public DubboBootstrap application(ApplicationConfig applicationConfig) {

// {@link RegistryConfig} correlative methods

/**
* Add an instance of {@link RegistryConfig} with {@link #DEFAULT_REGISTRY_ID default ID}
*
* @param consumerBuilder the {@link Consumer} of {@link RegistryBuilder}
* @return current {@link DubboBootstrap} instance
*/
public DubboBootstrap registry(Consumer<RegistryBuilder> consumerBuilder) {
return registry(DEFAULT_REGISTRY_ID, consumerBuilder);
}

/**
* Add an instance of {@link RegistryConfig} with the specified ID
*
* @param id the {@link RegistryConfig#getId() id} of {@link RegistryConfig}
* @param consumerBuilder the {@link Consumer} of {@link RegistryBuilder}
* @return current {@link DubboBootstrap} instance
*/
public DubboBootstrap registry(String id, Consumer<RegistryBuilder> consumerBuilder) {
RegistryBuilder builder = createRegistryBuilder(id);
consumerBuilder.accept(builder);
return registry(builder.build());
}

/**
* Add an instance of {@link RegistryConfig}
*
* @param registryConfig an instance of {@link RegistryConfig}
* @return current {@link DubboBootstrap} instance
*/
public DubboBootstrap registry(RegistryConfig registryConfig) {
return registries(asList(registryConfig));
configManager.addRegistry(registryConfig);
return this;
}

public DubboBootstrap registries(List<RegistryConfig> registryConfigs) {
configManager.addRegistries(registryConfigs, true);
/**
* Add an instance of {@link RegistryConfig}
*
* @param registryConfigs the multiple instances of {@link RegistryConfig}
* @return current {@link DubboBootstrap} instance
*/
public DubboBootstrap registries(Iterable<RegistryConfig> registryConfigs) {
registryConfigs.forEach(this::registry);
return this;
}

@@ -315,7 +342,7 @@ public DubboBootstrap configCenter(ConfigCenterConfig configCenterConfig) {
}

public DubboBootstrap configCenter(List<ConfigCenterConfig> configCenterConfigs) {
configManager.addConfigCenter(configCenterConfigs);
configManager.addConfigCenters(configCenterConfigs);
return this;
}

@@ -358,7 +385,7 @@ private void loadRemoteConfigs() {
}
});

configManager.addRegistries(tmpRegistries, true);
configManager.addRegistries(tmpRegistries);

// protocol ids to protocol configs
List<ProtocolConfig> tmpProtocols = new ArrayList<>();
@@ -382,22 +409,20 @@ private void loadRemoteConfigs() {
* there's no config center specified explicitly.
*/
private void useRegistryAsConfigCenterIfNecessary() {
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;
});
}
configManager.getDefaultRegistries().forEach(registryConfig -> {
if (registryConfig != null && registryConfig.isZookeeperProtocol()) {
// we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
Environment.getInstance().getDynamicConfiguration().orElseGet(() -> {
Collection<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();
});
@@ -432,8 +457,8 @@ public DubboBootstrap start() {
// 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"))
configManager.getRegistries().values(),
configManager.getProtocols().values()
);

/**
@@ -541,7 +566,7 @@ private void startMetadataReport() {
ApplicationConfig applicationConfig = configManager.getApplication().orElseThrow(() -> new IllegalStateException("There's no ApplicationConfig specified."));

// FIXME, multiple metadata config support.
Set<MetadataReportConfig> metadataReportConfigs = configManager.getMetadataConfigs();
Collection<MetadataReportConfig> metadataReportConfigs = configManager.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'.");
@@ -559,7 +584,7 @@ private void startMetadataReport() {
}

private void startConfigCenter() {
Set<ConfigCenterConfig> configCenters = configManager.getConfigCenters();
Collection<ConfigCenterConfig> configCenters = configManager.getConfigCenters();

if (CollectionUtils.isNotEmpty(configCenters)) {
CompositeDynamicConfiguration compositeDynamicConfiguration = new CompositeDynamicConfiguration();
@@ -619,8 +644,8 @@ public DubboBootstrap addEventListener(EventListener<?> listener) {
}

private List<URL> exportMetadataService(ApplicationConfig applicationConfig,
List<RegistryConfig> globalRegistryConfigs,
List<ProtocolConfig> globalProtocolConfigs) {
Collection<RegistryConfig> globalRegistryConfigs,
Collection<ProtocolConfig> globalProtocolConfigs) {
ConfigurableMetadataServiceExporter exporter = new ConfigurableMetadataServiceExporter();
exporter.setApplicationConfig(applicationConfig);
exporter.setRegistries(globalRegistryConfigs);
Original file line number Diff line number Diff line change
@@ -16,11 +16,6 @@
*/
package org.apache.dubbo.bootstrap;

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.junit.jupiter.api.Test;

import java.io.IOException;
@@ -35,14 +30,5 @@ public class DubboBootstrapTest {
@Test
public void test() throws IOException {

new DubboBootstrap()
.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()
.await();

System.in.read();
}
}
Original file line number Diff line number Diff line change
@@ -30,7 +30,10 @@ public static void main(String[] args) throws Exception {

new DubboBootstrap()
.application("dubbo-consumer-demo")
.registry(builder -> builder.address("zookeeper://127.0.0.1:2181?registry-type=service&subscribed-services=dubbo-provider-demo"))
// Zookeeper
// .registry("zookeeper", builder -> builder.address("zookeeper://127.0.0.1:2181?registry-type=service&subscribed-services=dubbo-provider-demo"))
// Nacos
.registry("nacos", builder -> builder.address("nacos://127.0.0.1:8848?registry-type=service&subscribed-services=dubbo-provider-demo"))
.reference("ref", builder -> builder.interfaceClass(EchoService.class))
.onlyRegisterProvider(true)
.start()
Original file line number Diff line number Diff line change
@@ -16,6 +16,8 @@
*/
package org.apache.dubbo.bootstrap;

import org.apache.curator.test.TestingServer;

import java.io.IOException;

/**
@@ -25,14 +27,34 @@
*/
public class DubboServiceProviderBootstrap {

public static void main(String[] args) throws IOException {
private static final String ZK_ADDRESS = "127.0.0.1";

private static final int ZK_PORT = 2181;

public static void main(String[] args) throws Exception {

String address = "zookeeper://" + ZK_ADDRESS + ":" + ZK_PORT + "?registry-type=service";

TestingServer testingServer = new TestingServer(2181, true);

new DubboBootstrap()
.application("dubbo-provider-demo")
.registry(builder -> builder.address("zookeeper://127.0.0.1:2181?registry-type=service"))
// Zookeeper in service registry type
.registry("zookeeper", builder -> builder.address(address))
// Nacos
// .registry("nacos", builder -> builder.address("nacos://127.0.0.1:8848?registry-type=service"))
.protocol(builder -> builder.port(-1).name("dubbo"))
.service(builder -> builder.id("test").interfaceClass(EchoService.class).ref(new EchoServiceImpl()))
.start()
.await();


// shutdown Zookeeper server
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
testingServer.close();
} catch (IOException e) {
}
}));
}
}
Original file line number Diff line number Diff line change
@@ -21,6 +21,9 @@
import javassist.CtMethod;
import javassist.NotFoundException;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
@@ -48,6 +51,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.util.Arrays.asList;
import static java.util.Collections.unmodifiableSet;
@@ -1127,7 +1131,7 @@ public static Type[] getReturnTypes(Method method) {
}
return new Type[]{returnType, genericReturnType};
}

/**
* Find the {@link Set} of {@link ParameterizedType}
*
@@ -1184,4 +1188,28 @@ public static <T> Set<Class<T>> findHierarchicalTypes(Class<?> sourceClass, Clas

return unmodifiableSet(hierarchicalTypes);
}

public static <T> T getProperty(Object bean, String propertyName) {
Class<?> beanClass = bean.getClass();
BeanInfo beanInfo = null;
T propertyValue = null;
try {
beanInfo = Introspector.getBeanInfo(beanClass);
propertyValue = (T) Stream.of(beanInfo.getPropertyDescriptors())
.filter(propertyDescriptor -> propertyName.equals(propertyDescriptor.getName()))
.map(PropertyDescriptor::getReadMethod)
.findFirst()
.map(method -> {
try {
return method.invoke(bean);
} catch (Exception e) {
}
return null;
}).get();
} catch (Exception e) {

}
return propertyValue;
}

}
Original file line number Diff line number Diff line change
@@ -255,7 +255,6 @@ protected void checkMetadataReport() {
}

/**
*
* Load the registry and conversion it to {@link URL}, the priority order is: system property > dubbo registry config
*
* @param provider whether it is the provider side
@@ -298,7 +297,6 @@ protected List<URL> loadRegistries(boolean provider) {
}

/**
*
* Load the monitor config from the system properties and conversation it to {@link URL}
*
* @param registryURL
@@ -358,7 +356,7 @@ static void appendRuntimeParameters(Map<String, String> map) {
* methods configured in the configuration file are included in the interface of remote service
*
* @param interfaceClass the interface of remote service
* @param methods the methods configured
* @param methods the methods configured
*/
protected void checkInterfaceAndMethods(Class<?> interfaceClass, List<MethodConfig> methods) {
// interface cannot be null
@@ -466,15 +464,14 @@ private void verify(Class<?> interfaceClass, Class<?> localClass) {
private void convertRegistryIdsToRegistries() {
if (StringUtils.isEmpty(registryIds)) {
if (CollectionUtils.isEmpty(registries)) {
setRegistries(
ConfigManager.getInstance().getDefaultRegistries()
.filter(CollectionUtils::isNotEmpty)
.orElseGet(() -> {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.refresh();
return Arrays.asList(registryConfig);
})
);
List<RegistryConfig> registryConfigs = ConfigManager.getInstance().getDefaultRegistries();
if (registryConfigs.isEmpty()) {
registryConfigs = new ArrayList<>();
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.refresh();
registryConfigs.add(registryConfig);
}
setRegistries(registryConfigs);
}
} else {
String[] ids = COMMA_SPLIT_PATTERN.split(registryIds);
@@ -668,7 +665,7 @@ public List<RegistryConfig> getRegistries() {

@SuppressWarnings({"unchecked"})
public void setRegistries(List<? extends RegistryConfig> registries) {
ConfigManager.getInstance().addRegistries((List<RegistryConfig>) registries, false);
ConfigManager.getInstance().addRegistries((List<RegistryConfig>) registries);
this.registries = (List<RegistryConfig>) registries;
}

Original file line number Diff line number Diff line change
@@ -882,15 +882,14 @@ private void checkProtocol() {
private void convertProtocolIdsToProtocols() {
if (StringUtils.isEmpty(protocolIds)) {
if (CollectionUtils.isEmpty(protocols)) {
setProtocols(
ConfigManager.getInstance().getDefaultProtocols()
.filter(CollectionUtils::isNotEmpty)
.orElseGet(() -> {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.refresh();
return new ArrayList<>(Arrays.asList(protocolConfig));
})
);
List<ProtocolConfig> protocolConfigs = ConfigManager.getInstance().getDefaultProtocols();
if (protocolConfigs.isEmpty()) {
protocolConfigs = new ArrayList<>(1);
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.refresh();
protocolConfigs.add(protocolConfig);
}
setProtocols(protocolConfigs);
}
} else {
String[] arr = COMMA_SPLIT_PATTERN.split(protocolIds);

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* 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.config.context;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ModuleConfig;
import org.apache.dubbo.config.MonitorConfig;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.apache.dubbo.config.context.ConfigManager.getInstance;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
* {@link ConfigManager} Test
*
* @since 2.7.4
*/
public class ConfigManagerTest {

private ConfigManager configManager = getInstance();

@BeforeEach
public void init() {
configManager.clear();
assertFalse(configManager.getApplication().isPresent());
assertFalse(configManager.getMonitor().isPresent());
assertFalse(configManager.getMonitor().isPresent());
}

@Test
public void testApplicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
configManager.setApplication(applicationConfig);
assertTrue(configManager.getApplication().isPresent());
assertEquals(applicationConfig, configManager.getApplication().get());
}

@Test
public void testMonitorConfig() {
MonitorConfig monitorConfig = new MonitorConfig();
configManager.setMonitor(monitorConfig);
assertTrue(configManager.getMonitor().isPresent());
assertEquals(monitorConfig, configManager.getMonitor().get());
}

@Test
public void tesModuleConfig() {
ModuleConfig config = new ModuleConfig();
configManager.setModule(config);
assertTrue(configManager.getModule().isPresent());
assertEquals(config, configManager.getModule().get());
}
}
Original file line number Diff line number Diff line change
@@ -49,9 +49,9 @@ public static void init() {
configManager.setApplication(applicationConfig);

// Add ProtocolConfig
configManager.addProtocol(protocolConfig(), true);
configManager.addProtocol(protocolConfig());
// Add RegistryConfig
configManager.addRegistry(registryConfig(), true);
configManager.addRegistry(registryConfig());
}

private static ProtocolConfig protocolConfig() {
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/*
* 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.registry.client;

import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory;
import org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfiguration;
import org.apache.dubbo.event.EventListener;
import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent;
import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;

import java.util.Set;

import static com.alibaba.fastjson.JSON.toJSONString;
import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;

/**
* File System {@link ServiceDiscovery} implementation
*
* @see FileSystemDynamicConfiguration
* @since 2.7.4
*/
public class FileSystemServiceDiscovery implements ServiceDiscovery, EventListener<ServiceInstancesChangedEvent> {

private final URL connectionURL;

private FileSystemDynamicConfiguration dynamicConfiguration;

public FileSystemServiceDiscovery(URL connectionURL) {
this.connectionURL = connectionURL;
}

@Override
public void onEvent(ServiceInstancesChangedEvent event) {

}

@Override
public void start() {
if (dynamicConfiguration == null) {
dynamicConfiguration = createDynamicConfiguration(connectionURL);
}
}

@Override
public void stop() {
try {
if (dynamicConfiguration != null) {
dynamicConfiguration.close();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}

private String getConfigKey(ServiceInstance serviceInstance) {
return serviceInstance.getId();
}

private String getConfigGroup(ServiceInstance serviceInstance) {
return serviceInstance.getServiceName();
}

@Override
public void register(ServiceInstance serviceInstance) throws RuntimeException {
String key = getConfigKey(serviceInstance);
String group = getConfigGroup(serviceInstance);
String content = toJSONString(serviceInstance);
dynamicConfiguration.publishConfig(key, group, content);
}

@Override
public void update(ServiceInstance serviceInstance) throws RuntimeException {
register(serviceInstance);
}

@Override
public void unregister(ServiceInstance serviceInstance) throws RuntimeException {
String key = getConfigKey(serviceInstance);
String group = getConfigGroup(serviceInstance);
dynamicConfiguration.removeConfig(key, group);
}

@Override
public Set<String> getServices() {
return null;
}

@Override
public void addServiceInstancesChangedListener(String serviceName, ServiceInstancesChangedListener listener) throws
NullPointerException, IllegalArgumentException {

}

private static FileSystemDynamicConfiguration createDynamicConfiguration(URL connectionURL) {
String protocol = connectionURL.getProtocol();
DynamicConfigurationFactory factory = getExtensionLoader(DynamicConfigurationFactory.class).getExtension(protocol);
return (FileSystemDynamicConfiguration) factory.getDynamicConfiguration(connectionURL);
}
}