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 2019/08/20 07:40:55 UTC
[dubbo-admin] branch develop updated: redis metadata support
cluster #480 (#481)
This is an automated email from the ASF dual-hosted git repository.
min pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-admin.git
The following commit(s) were added to refs/heads/develop by this push:
new 342e3cb redis metadata support cluster #480 (#481)
342e3cb is described below
commit 342e3cbd48b7d26aa228db5b7b529b85cb53a958
Author: Mr.Z <15...@163.com>
AuthorDate: Tue Aug 20 15:40:50 2019 +0800
redis metadata support cluster #480 (#481)
---
.../apache/dubbo/admin/config/ConfigCenter.java | 5 ++
.../metadata/impl/RedisMetaDataCollector.java | 54 ++++++++++++++++++++--
2 files changed, 54 insertions(+), 5 deletions(-)
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index 5682f9c..b0d3379 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -36,6 +36,7 @@ import org.springframework.context.annotation.DependsOn;
import java.util.Arrays;
+import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
@Configuration
public class ConfigCenter {
@@ -52,6 +53,9 @@ public class ConfigCenter {
@Value("${admin.metadata-report.address:}")
private String metadataAddress;
+ @Value("${admin.metadata-report.cluster:false}")
+ private boolean cluster;
+
@Value("${admin.registry.group:dubbo}")
private String registryGroup;
@@ -142,6 +146,7 @@ public class ConfigCenter {
if (metadataUrl == null) {
if (StringUtils.isNotEmpty(metadataAddress)) {
metadataUrl = formUrl(metadataAddress, metadataGroup, username, password);
+ metadataUrl = metadataUrl.addParameter(CLUSTER_KEY, cluster);
}
}
if (metadataUrl != null) {
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java
index 2431b8e..0325151 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java
@@ -18,18 +18,38 @@
package org.apache.dubbo.admin.registry.metadata.impl;
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
+import org.apache.dubbo.rpc.RpcException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;
+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;
+import static org.apache.dubbo.metadata.identifier.MetadataIdentifier.META_DATA_STORE_TAG;
+
public class RedisMetaDataCollector implements MetaDataCollector {
- private URL url;
+ private final static Logger logger = LoggerFactory.getLogger(RedisMetaDataCollector.class);
+ private URL url;
private JedisPool pool;
private static final String META_DATA_SOTRE_TAG = ".metaData";
+ Set<HostAndPort> jedisClusterNodes;
+ private int timeout;
+ private String password;
+
@Override
public void setUrl(URL url) {
this.url = url;
@@ -42,7 +62,18 @@ public class RedisMetaDataCollector implements MetaDataCollector {
@Override
public void init() {
- pool = new JedisPool(new JedisPoolConfig(), url.getHost(), url.getPort());
+ timeout = url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT);
+ password = url.getPassword();
+ if (url.getParameter(CLUSTER_KEY, false)) {
+ jedisClusterNodes = new HashSet<>();
+ String[] addresses = COMMA_SPLIT_PATTERN.split(url.getAddress());
+ for (String address : addresses) {
+ URL tmpUrl = url.setAddress(address);
+ jedisClusterNodes.add(new HostAndPort(tmpUrl.getHost(), tmpUrl.getPort()));
+ }
+ } else {
+ pool = new JedisPool(new JedisPoolConfig(), url.getHost(), url.getPort(), timeout, url.getPassword());
+ }
}
@Override
@@ -56,9 +87,22 @@ public class RedisMetaDataCollector implements MetaDataCollector {
}
private String doGetMetaData(MetadataIdentifier identifier) {
- //TODO error handing
- Jedis jedis = pool.getResource();
- String result = jedis.get(identifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY) + META_DATA_SOTRE_TAG);
+ String result = null;
+ if (url.getParameter(CLUSTER_KEY, false)) {
+ try (JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes, timeout, timeout, 2, password, new GenericObjectPoolConfig())) {
+ result = jedisCluster.get(identifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY) + META_DATA_STORE_TAG);
+ } catch (Throwable e) {
+ logger.error("Failed to get " + identifier + " from redis cluster, cause: " + e.getMessage(), e);
+ throw new RpcException("Failed to get " + identifier + " from redis cluster, cause: " + e.getMessage(), e);
+ }
+ } else {
+ try (Jedis jedis = pool.getResource()) {
+ result = jedis.get(identifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY) + META_DATA_SOTRE_TAG);
+ } catch (Throwable e) {
+ logger.error("Failed to get " + identifier + " from redis, cause: " + e.getMessage(), e);
+ throw new RpcException("Failed to get " + identifier + " from redis, cause: " + e.getMessage(), e);
+ }
+ }
return result;
}
}