diff --git a/pom.xml b/pom.xml
index e5a9933..ad4bfd3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,11 +16,12 @@
1.8
- 4.1.35.Final
+ 4.1.39.Final
1.7.26
1.2.17
2.12.0
2.7.3
+ 1.1.3
@@ -60,6 +61,11 @@
fastjson
1.2.54
+
+ com.alibaba.nacos
+ nacos-client
+ ${nacos.version}
+
@@ -119,6 +125,18 @@
fastjson
+
+ com.alibaba.nacos
+ nacos-client
+ ${nacos.version}
+
+
+ guava
+ com.google.guava
+
+
+
+
diff --git a/src/main/java/org/apache/dubbo/proxy/Config.java b/src/main/java/org/apache/dubbo/proxy/Config.java
index 46bd136..3b9d2dd 100644
--- a/src/main/java/org/apache/dubbo/proxy/Config.java
+++ b/src/main/java/org/apache/dubbo/proxy/Config.java
@@ -64,6 +64,8 @@ MetadataCollector getMetadataCollector() {
URL metadataUrl = URL.valueOf(metadataAddress);
metaDataCollector = ExtensionLoader.getExtensionLoader(MetadataCollector.class).
getExtension(metadataUrl.getProtocol());
+ metaDataCollector.setUrl(metadataUrl);
+ metaDataCollector.init();
}
return metaDataCollector;
}
diff --git a/src/main/java/org/apache/dubbo/proxy/metadata/impl/NacosMetadataCollector.java b/src/main/java/org/apache/dubbo/proxy/metadata/impl/NacosMetadataCollector.java
new file mode 100644
index 0000000..0c47ebc
--- /dev/null
+++ b/src/main/java/org/apache/dubbo/proxy/metadata/impl/NacosMetadataCollector.java
@@ -0,0 +1,90 @@
+package org.apache.dubbo.proxy.metadata.impl;
+
+
+import org.apache.dubbo.proxy.metadata.MetadataCollector;
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
+
+import com.alibaba.nacos.api.NacosFactory;
+import com.alibaba.nacos.api.config.ConfigService;
+import com.alibaba.nacos.api.exception.NacosException;
+import org.apache.dubbo.proxy.utils.Constants;
+
+import java.util.Properties;
+
+import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
+
+public class NacosMetadataCollector implements MetadataCollector {
+ private static final Logger logger = LoggerFactory.getLogger(NacosMetadataCollector.class);
+ private ConfigService configService;
+ private String group;
+ private URL url;
+ private final static String DEFAULT_ROOT = "dubbo";
+ @Override
+ public void setUrl(URL url) {
+ this.url = url;
+ }
+
+ @Override
+ public URL getUrl() {
+ return url;
+ }
+
+ @Override
+ public void init() {
+ group = url.getParameter(Constants.GROUP_KEY, DEFAULT_ROOT);
+
+ configService = buildConfigService(url);
+ }
+
+ private ConfigService buildConfigService(URL url) {
+ Properties nacosProperties = buildNacosProperties(url);
+ try {
+ configService = NacosFactory.createConfigService(nacosProperties);
+ } catch (NacosException e) {
+ if (logger.isErrorEnabled()) {
+ logger.error(e.getErrMsg(), e);
+ }
+ throw new IllegalStateException(e);
+ }
+ return configService;
+ }
+
+ private Properties buildNacosProperties(URL url) {
+ Properties properties = new Properties();
+ setServerAddr(url, properties);
+ return properties;
+ }
+
+ private void setServerAddr(URL url, Properties properties) {
+
+ String serverAddr = url.getHost() + // Host
+ ":" +
+ url.getPort() // Port
+ ;
+ properties.put(SERVER_ADDR, serverAddr);
+ }
+
+ @Override
+ public String getProviderMetaData(MetadataIdentifier key) {
+ return getMetaData(key);
+ }
+
+// @Override
+ public String getConsumerMetaData(MetadataIdentifier key) {
+ return getMetaData(key);
+ }
+
+ private String getMetaData(MetadataIdentifier identifier) {
+ try {
+ return configService.getConfig(identifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY),
+ group, 1000 * 10);
+ } catch (NacosException e) {
+ logger.warn("Failed to get " + identifier + " from nacos, cause: " + e.getMessage(), e);
+ }
+ return null;
+ }
+}
+
diff --git a/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java b/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java
index eccdcd8..dd5b5d1 100644
--- a/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java
+++ b/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java
@@ -50,7 +50,9 @@ public static Object genericCall(String interfaceName, String group,
logger.info("dubbo generic invoke, service is {}, method is {} , paramTypes is {} , paramObjs is {} , svc" +
" is {}.", interfaceName
, methodName,paramTypes,paramObjs,svc);
- return svc.$invoke(methodName, paramTypes, paramObjs);
+ Object obj = svc.$invoke(methodName, paramTypes, paramObjs);
+ logger.debug("invoke ret: {}",obj);
+ return obj;
} catch (Exception e) {
logger.error("Generic invoke failed",e);
if (e instanceof RpcException) {
diff --git a/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java b/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java
index cc89b83..eb4b93d 100644
--- a/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java
+++ b/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java
@@ -117,7 +117,7 @@ private boolean writeResponse(ChannelHandlerContext ctx, Object result) {
}
private String[] getTypesFromMetadata(String application, String interfaze, String group, String version, String methodName, int paramLen) {
- MetadataIdentifier identifier = new MetadataIdentifier(interfaze, version, group, Constants.PROVIDER_SIDE, application);
+ MetadataIdentifier identifier = new MetadataIdentifier(interfaze, version, null, Constants.PROVIDER_SIDE, application);
String metadata = metadataCollector.getProviderMetaData(identifier);
FullServiceDefinition serviceDefinition = JSON.parseObject(metadata, FullServiceDefinition.class);
List methods = serviceDefinition.getMethods();
diff --git a/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.proxy.metadata.MetadataCollector b/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.proxy.metadata.MetadataCollector
index 9ddd9e9..74dcab0 100644
--- a/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.proxy.metadata.MetadataCollector
+++ b/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.proxy.metadata.MetadataCollector
@@ -1 +1,2 @@
zookeeper=org.apache.dubbo.proxy.metadata.impl.ZookeeperMetadataCollector
+nacos=org.apache.dubbo.proxy.metadata.impl.NacosMetadataCollector
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 5514325..e3c509c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,8 +1,8 @@
netty.port: 8000
business.thread.count: 100
-proxy.registry.address: zookeeper://127.0.0.1:2181
+proxy.registry.address: nacos://127.0.0.1:8848
proxy.registry.group: dubbo
-proxy.metadata-report.address: zookeeper://127.0.0.1:2181
+proxy.metadata-report.address: nacos://127.0.0.1:8848