This is an automated email from the ASF dual-hosted git repository.
iluo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new d11f204 fixed injvm export and refer (#3857)
d11f204 is described below
commit d11f204592a3c130c0b86abb22da036b9f81aca1
Author: huaifeng <[email protected]>
AuthorDate: Mon May 6 14:25:31 2019 +0800
fixed injvm export and refer (#3857)
* fix injvm export and refer
* Add default injvm protocol
is only injvm protocol don't register
* Multiple protocol registry filter injvm
* isOnlyJvm
---
.../org/apache/dubbo/config/ReferenceConfig.java | 25 +++++----
.../org/apache/dubbo/config/ServiceConfig.java | 65 ++++++++++++++--------
2 files changed, 55 insertions(+), 35 deletions(-)
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 4c37937..5ecae9c 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -354,19 +354,22 @@ public class ReferenceConfig<T> extends
AbstractReferenceConfig {
}
}
} else { // assemble URL from register center's configuration
- checkRegistry();
- List<URL> us = loadRegistries(false);
- if (CollectionUtils.isNotEmpty(us)) {
- for (URL u : us) {
- URL monitorUrl = loadMonitor(u);
- if (monitorUrl != null) {
- map.put(Constants.MONITOR_KEY,
URL.encode(monitorUrl.toFullString()));
+ // if protocols not injvm checkRegistry
+ if (!Constants.LOCAL_PROTOCOL.equalsIgnoreCase(getProtocol())){
+ checkRegistry();
+ List<URL> us = loadRegistries(false);
+ if (CollectionUtils.isNotEmpty(us)) {
+ for (URL u : us) {
+ URL monitorUrl = loadMonitor(u);
+ if (monitorUrl != null) {
+ map.put(Constants.MONITOR_KEY,
URL.encode(monitorUrl.toFullString()));
+ }
+
urls.add(u.addParameterAndEncoded(Constants.REFER_KEY,
StringUtils.toQueryString(map)));
}
- urls.add(u.addParameterAndEncoded(Constants.REFER_KEY,
StringUtils.toQueryString(map)));
}
- }
- if (urls.isEmpty()) {
- throw new IllegalStateException("No such any registry to
reference " + interfaceName + " on the consumer " + NetUtils.getLocalHost() + "
use dubbo version " + Version.getVersion() + ", please config <dubbo:registry
address=\"...\" /> to your spring config.");
+ if (urls.isEmpty()) {
+ throw new IllegalStateException("No such any registry
to reference " + interfaceName + " on the consumer " + NetUtils.getLocalHost()
+ " use dubbo version " + Version.getVersion() + ", please config
<dubbo:registry address=\"...\" /> to your spring config.");
+ }
}
}
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 0c38b2f..86c5ed4 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -269,9 +269,12 @@ public class ServiceConfig<T> extends
AbstractServiceConfig {
// Config Center should always being started first.
startConfigCenter();
checkDefault();
- checkApplication();
- checkRegistry();
checkProtocol();
+ checkApplication();
+ // if protocol is not injvm checkRegistry
+ if (!isOnlyInJvm()) {
+ checkRegistry();
+ }
this.refresh();
checkMetadataReport();
@@ -327,6 +330,15 @@ public class ServiceConfig<T> extends
AbstractServiceConfig {
checkMock(interfaceClass);
}
+ /**
+ * Determine if it is injvm
+ *
+ * @return
+ */
+ private boolean isOnlyInJvm() {
+ return getProtocols().size() == 1 &&
Constants.LOCAL_PROTOCOL.equalsIgnoreCase(getProtocols().get(0).getName());
+ }
+
public synchronized void export() {
checkAndUpdateSubConfigs();
@@ -539,11 +551,15 @@ public class ServiceConfig<T> extends
AbstractServiceConfig {
}
// export to remote if the config is not local (export to local
only when config is local)
if (!Constants.SCOPE_LOCAL.equalsIgnoreCase(scope)) {
- if (logger.isInfoEnabled()) {
+ if (!isOnlyInJvm() && logger.isInfoEnabled()) {
logger.info("Export dubbo service " +
interfaceClass.getName() + " to url " + url);
}
if (CollectionUtils.isNotEmpty(registryURLs)) {
for (URL registryURL : registryURLs) {
+ //if protocol is only injvm ,not register
+ if
(Constants.LOCAL_PROTOCOL.equalsIgnoreCase(url.getProtocol())) {
+ continue;
+ }
url = url.addParameterIfAbsent(Constants.DYNAMIC_KEY,
registryURL.getParameter(Constants.DYNAMIC_KEY));
URL monitorUrl = loadMonitor(registryURL);
if (monitorUrl != null) {
@@ -586,18 +602,19 @@ public class ServiceConfig<T> extends
AbstractServiceConfig {
}
@SuppressWarnings({"unchecked", "rawtypes"})
+ /**
+ * always export injvm
+ */
private void exportLocal(URL url) {
- if (!Constants.LOCAL_PROTOCOL.equalsIgnoreCase(url.getProtocol())) {
- URL local = URLBuilder.from(url)
- .setProtocol(Constants.LOCAL_PROTOCOL)
- .setHost(LOCALHOST_VALUE)
- .setPort(0)
- .build();
- Exporter<?> exporter = protocol.export(
- proxyFactory.getInvoker(ref, (Class) interfaceClass,
local));
- exporters.add(exporter);
- logger.info("Export dubbo service " + interfaceClass.getName() + "
to local registry");
- }
+ URL local = URLBuilder.from(url)
+ .setProtocol(Constants.LOCAL_PROTOCOL)
+ .setHost(LOCALHOST_VALUE)
+ .setPort(0)
+ .build();
+ Exporter<?> exporter = protocol.export(
+ proxyFactory.getInvoker(ref, (Class) interfaceClass, local));
+ exporters.add(exporter);
+ logger.info("Export dubbo service " + interfaceClass.getName() + " to
local registry url : " + local);
}
private Optional<String> getContextPath(ProtocolConfig protocolConfig) {
@@ -803,7 +820,7 @@ public class ServiceConfig<T> extends AbstractServiceConfig
{
if (provider != null) {
return;
}
- setProvider (
+ setProvider(
ConfigManager.getInstance()
.getDefaultProvider()
.orElseGet(() -> {
@@ -834,15 +851,15 @@ public class ServiceConfig<T> extends
AbstractServiceConfig {
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));
- })
- );
+ setProtocols(
+ ConfigManager.getInstance().getDefaultProtocols()
+ .filter(CollectionUtils::isNotEmpty)
+ .orElseGet(() -> {
+ ProtocolConfig protocolConfig = new
ProtocolConfig();
+ protocolConfig.refresh();
+ return new
ArrayList<>(Arrays.asList(protocolConfig));
+ })
+ );
}
} else {
String[] arr = Constants.COMMA_SPLIT_PATTERN.split(protocolIds);