You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by mi...@apache.org on 2018/11/22 03:32:44 UTC

[incubator-dubbo-ops] branch metadata updated: generate client bean

This is an automated email from the ASF dual-hosted git repository.

min pushed a commit to branch metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-ops.git


The following commit(s) were added to refs/heads/metadata by this push:
     new 61d3efb  generate client bean
61d3efb is described below

commit 61d3efb02a419353de0f157543f2c700649ad55f
Author: nzomkxia <z8...@gmail.com>
AuthorDate: Thu Nov 22 11:32:47 2018 +0800

    generate client bean
---
 .../apache/dubbo/admin/common/util/Constants.java  |  9 +++
 .../apache/dubbo/admin/config/ConfigCenter.java    | 71 ++++++++++++++++------
 .../admin/data/metadata/MetaDataCollector.java     | 12 +++-
 .../data/metadata/impl/RedisMetaDataCollector.java | 25 +++++++-
 .../metadata/impl/ZookeeperMetaDataCollector.java  | 32 +++++++++-
 .../dubbo/admin/service/impl/AbstractService.java  |  4 ++
 .../src/main/resources/application.properties      |  1 -
 7 files changed, 131 insertions(+), 23 deletions(-)

diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/Constants.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
new file mode 100644
index 0000000..9e4c5d0
--- /dev/null
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
@@ -0,0 +1,9 @@
+package org.apache.dubbo.admin.common.util;
+
+
+public class Constants {
+
+    public static final String REGISTRY_ADDRESS = "dubbo.registry.address";
+    public static final String METADATA_ADDRESS = "dubbo.metadatareport.address";
+
+}
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index b520627..1af2e09 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -1,7 +1,8 @@
 package org.apache.dubbo.admin.config;
 
+import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.data.config.GovernanceConfiguration;
-import org.apache.dubbo.common.Constants;
+import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.registry.Registry;
@@ -9,50 +10,84 @@ import org.apache.dubbo.registry.RegistryFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
+
+import java.util.Arrays;
+
 
 @Configuration
 public class ConfigCenter {
 
 
-    @Value("${dubbo.configcenter}")
+    @Value("${dubbo.configcenter:}")
     private String configCenter;
 
-    @Value("${dubbo.registry.address}")
+    @Value("${dubbo.registry.address:}")
     private String registryAddress;
 
-    @Value("${dubbo.registry.group}")
+    private static String globalConfigPath = "/config/dubbo/dubbo.properties";
+
+    @Value("${dubbo.registry.group:}")
     private String group;
 
 
     private URL configCenterUrl;
     private URL registryUrl;
+    private URL metadataUrl;
 
 
-    @Bean
-    Registry getRegistryService() {
-        if (registryAddress != null) {
-            registryUrl = formUrl(registryAddress);
-            if (group != null) {
-                registryUrl.addParameter(Constants.GROUP_KEY, group);
-            }
-            RegistryFactory factory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
-            return factory.getRegistry(registryUrl);
-        }
-        return null;
-    }
-
-    @Bean
+    /*
+     * generate dynamic configuration client
+     */
+    @Bean("governanceConfiguration")
     GovernanceConfiguration getDynamicConfiguration() {
         if (configCenter != null) {
             configCenterUrl = formUrl(configCenter);
             GovernanceConfiguration dynamicConfiguration = ExtensionLoader.getExtensionLoader(GovernanceConfiguration.class).getExtension(configCenterUrl.getProtocol());
             dynamicConfiguration.setUrl(configCenterUrl);
             dynamicConfiguration.init();
+            globalConfigPath = group == null ? "/dubbo" + globalConfigPath : "/" + group + globalConfigPath;
+            String config = dynamicConfiguration.getConfig(globalConfigPath);
+
+            Arrays.stream(config.split("\n")).forEach( s -> {
+                if(s.startsWith(Constants.REGISTRY_ADDRESS)) {
+                    registryUrl = formUrl(s.split("=")[1].trim());
+                } else if (s.startsWith(Constants.METADATA_ADDRESS)) {
+                    metadataUrl = formUrl(s.split("=")[1].trim());
+                }
+            });
             return dynamicConfiguration;
         }
         return null;
     }
 
+    /*
+     * generate registry client
+     */
+    @Bean
+    @DependsOn("governanceConfiguration")
+    Registry getRegistry() {
+        Registry registry = null;
+        if (registryUrl != null) {
+            RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
+            registry = registryFactory.getRegistry(registryUrl);
+        }
+        return registry;
+    }
+
+    /*
+     * generate metadata client
+     */
+    @Bean
+    @DependsOn("governanceConfiguration")
+    MetaDataCollector getMetadataCollector() {
+        MetaDataCollector metaDataCollector = null;
+        if (metadataUrl != null) {
+            metaDataCollector = ExtensionLoader.getExtensionLoader(MetaDataCollector.class).getExtension(metadataUrl.getProtocol());
+        }
+        return metaDataCollector;
+    }
+
     private URL formUrl(String config) {
         String protocol = config.split("://")[0];
         String address = config.split("://")[1];
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/MetaDataCollector.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/MetaDataCollector.java
index deedce5..77b7041 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/MetaDataCollector.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/MetaDataCollector.java
@@ -1,5 +1,15 @@
 package org.apache.dubbo.admin.data.metadata;
 
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.extension.SPI;
+
+@SPI("zookeeper")
 public interface MetaDataCollector {
-    public String getMetaData(String path);
+
+    void setUrl(URL url);
+
+    URL getUrl();
+
+    void init();
+    String getMetaData(String path);
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/RedisMetaDataCollector.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/RedisMetaDataCollector.java
index 23bd52f..82d0e71 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/RedisMetaDataCollector.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/RedisMetaDataCollector.java
@@ -2,10 +2,33 @@ package org.apache.dubbo.admin.data.metadata.impl;
 
 
 import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
+import org.apache.dubbo.common.URL;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+import redis.clients.jedis.JedisPoolConfig;
 
 public class RedisMetaDataCollector implements MetaDataCollector {
+
+    private  URL url;
+    private JedisPool pool;
+    @Override
+    public void setUrl(URL url) {
+        this.url = url;
+    }
+
+    @Override
+    public URL getUrl() {
+        return url;
+    }
+
+    @Override
+    public void init() {
+        pool = new JedisPool(new JedisPoolConfig(), url.getHost(), url.getPort());
+    }
+
     @Override
     public String getMetaData(String path) {
-        return null;
+        Jedis jedis = pool.getResource();
+        return jedis.get(path);
     }
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/ZookeeperMetaDataCollector.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/ZookeeperMetaDataCollector.java
index 2423fce..d6033f8 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/ZookeeperMetaDataCollector.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/data/metadata/impl/ZookeeperMetaDataCollector.java
@@ -1,15 +1,43 @@
 package org.apache.dubbo.admin.data.metadata.impl;
 
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.retry.ExponentialBackoffRetry;
 import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
+import org.apache.dubbo.common.URL;
 import org.apache.dubbo.remoting.zookeeper.ZookeeperClient;
 
 public class ZookeeperMetaDataCollector implements MetaDataCollector {
 
-    ZookeeperClient client;
+    CuratorFramework client;
+    URL url;
+
+    @Override
+    public void setUrl(URL url) {
+        this.url = url;
+    }
+
+    @Override
+    public URL getUrl() {
+        return url;
+    }
+
+    @Override
+    public void init() {
+        client = CuratorFrameworkFactory.newClient(url.getAddress(), new ExponentialBackoffRetry(1000, 3));
+        client.start();
+    }
 
     @Override
     public String getMetaData(String path) {
-        client.getContent(path);
+        try {
+            if (client.checkExists().forPath(path) == null) {
+                return null;
+            }
+            return new String(client.getData().forPath(path));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         return null;
     }
 }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/AbstractService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/AbstractService.java
index f7137d3..30b81ce 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/AbstractService.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/AbstractService.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.admin.service.impl;
 
 import org.apache.dubbo.admin.data.config.GovernanceConfiguration;
+import org.apache.dubbo.admin.data.metadata.MetaDataCollector;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
@@ -44,6 +45,9 @@ public class AbstractService {
     protected GovernanceConfiguration dynamicConfiguration;
 
     @Autowired
+    protected MetaDataCollector metaDataCollector;
+
+    @Autowired
     private RegistryServerSync sync;
 
     public ConcurrentMap<String, ConcurrentMap<String, Map<String, URL>>> getRegistryCache() {
diff --git a/dubbo-admin-backend/src/main/resources/application.properties b/dubbo-admin-backend/src/main/resources/application.properties
index 87d44b8..294b80e 100644
--- a/dubbo-admin-backend/src/main/resources/application.properties
+++ b/dubbo-admin-backend/src/main/resources/application.properties
@@ -15,7 +15,6 @@
 # limitations under the License.
 #
 
-dubbo.registry.address=zookeeper://127.0.0.1:2181
 dubbo.registry.group=dubbo
 dubbo.configcenter=zookeeper://127.0.0.1:2181
 dubbo.apollo.token=xxxxx
\ No newline at end of file