This is an automated email from the ASF dual-hosted git repository.
liujun 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 df084ad Support Redis cluster in Metadata Report (#3863)
df084ad is described below
commit df084addc804ef727ae9f1959b10f88ffd5a0ddc
Author: cvictory <[email protected]>
AuthorDate: Wed May 22 15:31:37 2019 +0800
Support Redis cluster in Metadata Report (#3863)
fixes #3817
---
.../apache/dubbo/config/MetadataReportConfig.java | 13 ++++++
.../src/main/resources/META-INF/compat/dubbo.xsd | 5 +++
.../src/main/resources/META-INF/dubbo.xsd | 5 +++
.../metadata/identifier/MetadataIdentifier.java | 4 +-
.../metadata/store/redis/RedisMetadataReport.java | 46 ++++++++++++++++++++--
5 files changed, 67 insertions(+), 6 deletions(-)
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
index a7c72f6..5233171 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
@@ -71,6 +71,11 @@ public class MetadataReportConfig extends AbstractConfig {
*/
private Boolean syncReport;
+ /**
+ * cluster
+ */
+ private Boolean cluster;
+
public MetadataReportConfig() {
}
@@ -174,4 +179,12 @@ public class MetadataReportConfig extends AbstractConfig {
public void setGroup(String group) {
this.group = group;
}
+
+ public Boolean getCluster() {
+ return cluster;
+ }
+
+ public void setCluster(Boolean cluster) {
+ this.cluster = cluster;
+ }
}
diff --git
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
index c12389f..756f6da 100644
---
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
+++
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
@@ -632,6 +632,11 @@
<xsd:documentation><![CDATA[ Sync or Async report.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
+ <xsd:attribute name="cluster" type="xsd:boolean" use="optional">
+ <xsd:annotation>
+ <xsd:documentation><![CDATA[ Need cluster support, default
false. ]]></xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
</xsd:complexType>
<xsd:complexType name="configCenterType">
diff --git
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
index 5cc621f..4a8cf56 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
@@ -626,6 +626,11 @@
<xsd:documentation><![CDATA[ Sync or Async report.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
+ <xsd:attribute name="cluster" type="xsd:boolean" use="optional">
+ <xsd:annotation>
+ <xsd:documentation><![CDATA[ Need cluster support, default
false. ]]></xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
</xsd:complexType>
<xsd:complexType name="configCenterType">
diff --git
a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java
b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java
index 602e4b2..3b20bc7 100644
---
a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java
+++
b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java
@@ -31,8 +31,8 @@ import static
org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
public class MetadataIdentifier {
public static final String SEPARATOR = ":";
- final static String DEFAULT_PATH_TAG = "metadata";
- final static String META_DATA_STORE_TAG = ".metaData";
+ public final static String DEFAULT_PATH_TAG = "metadata";
+ public final static String META_DATA_STORE_TAG = ".metaData";
private String serviceInterface;
private String version;
diff --git
a/dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
b/dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
index c0b992d..a9245eb 100644
---
a/dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
+++
b/dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
@@ -22,12 +22,22 @@ import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
import org.apache.dubbo.metadata.support.AbstractMetadataReport;
import org.apache.dubbo.rpc.RpcException;
+
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
+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.List;
+import java.util.Set;
+
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.common.constants.ConfigConstants.CLUSTER_KEY;
+import static
org.apache.dubbo.metadata.identifier.MetadataIdentifier.META_DATA_STORE_TAG;
/**
* RedisMetadataReport
@@ -36,12 +46,24 @@ public class RedisMetadataReport extends
AbstractMetadataReport {
private final static Logger logger =
LoggerFactory.getLogger(RedisMetadataReport.class);
- final JedisPool pool;
+ JedisPool pool;
+ Set<HostAndPort> jedisClusterNodes;
+ private int timeout;
+ private String password;
+
public RedisMetadataReport(URL url) {
super(url);
- int timeout = url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT);
- pool = new JedisPool(new JedisPoolConfig(), url.getHost(),
url.getPort(), timeout, url.getPassword());
+ timeout = url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT);
+ if (url.getParameter(CLUSTER_KEY, false)) {
+ jedisClusterNodes = new HashSet<HostAndPort>();
+ List<URL> urls = url.getBackupUrls();
+ for (URL tmpUrl : urls) {
+ jedisClusterNodes.add(new HostAndPort(tmpUrl.getHost(),
tmpUrl.getPort()));
+ }
+ } else {
+ pool = new JedisPool(new JedisPoolConfig(), url.getHost(),
url.getPort(), timeout, url.getPassword());
+ }
}
@Override
@@ -55,6 +77,23 @@ public class RedisMetadataReport extends
AbstractMetadataReport {
}
private void storeMetadata(MetadataIdentifier metadataIdentifier, String
v) {
+ if (pool != null) {
+ storeMetadataStandalone(metadataIdentifier, v);
+ } else {
+ storeMetadataInCluster(metadataIdentifier, v);
+ }
+ }
+
+ private void storeMetadataInCluster(MetadataIdentifier metadataIdentifier,
String v) {
+ try (JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes,
timeout, timeout, 2, password, new GenericObjectPoolConfig())) {
+ jedisCluster.set(metadataIdentifier.getIdentifierKey() +
META_DATA_STORE_TAG, v);
+ } catch (Throwable e) {
+ logger.error("Failed to put " + metadataIdentifier + " to redis
cluster " + v + ", cause: " + e.getMessage(), e);
+ throw new RpcException("Failed to put " + metadataIdentifier + "
to redis cluster " + v + ", cause: " + e.getMessage(), e);
+ }
+ }
+
+ private void storeMetadataStandalone(MetadataIdentifier
metadataIdentifier, String v) {
try (Jedis jedis = pool.getResource()) {
jedis.set(metadataIdentifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY),
v);
} catch (Throwable e) {
@@ -63,5 +102,4 @@ public class RedisMetadataReport extends
AbstractMetadataReport {
}
}
-
}