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