This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new c174d5a433 move the dubbo-metadata-report-redis to the
dubbo-spi-extensions (#14464)
c174d5a433 is described below
commit c174d5a4332617574319d0a97af8c5e0abc7c9b9
Author: aofall <[email protected]>
AuthorDate: Tue Jul 23 11:16:07 2024 +0800
move the dubbo-metadata-report-redis to the dubbo-spi-extensions (#14464)
---
.artifacts | 1 -
dubbo-config/dubbo-config-api/pom.xml | 7 -
dubbo-distribution/dubbo-all-shaded/pom.xml | 8 -
dubbo-distribution/dubbo-all/pom.xml | 8 -
dubbo-distribution/dubbo-bom/pom.xml | 5 -
dubbo-metadata/dubbo-metadata-report-redis/pom.xml | 58 ---
.../metadata/store/redis/RedisMetadataReport.java | 553 ---------------------
.../store/redis/RedisMetadataReportFactory.java | 32 --
...che.dubbo.metadata.report.MetadataReportFactory | 1 -
.../store/redis/RedisMetadata4TstService.java | 27 -
.../store/redis/RedisMetadataReportTest.java | 364 --------------
.../src/test/resources/log4j2-test.xml | 29 --
dubbo-metadata/pom.xml | 1 -
dubbo-test/dubbo-dependencies-all/pom.xml | 5 -
14 files changed, 1099 deletions(-)
diff --git a/.artifacts b/.artifacts
index 41748ff3bf..41ce8e207a 100644
--- a/.artifacts
+++ b/.artifacts
@@ -49,7 +49,6 @@ dubbo-metadata-api
dubbo-metadata-definition-protobuf
dubbo-metadata-processor
dubbo-metadata-report-nacos
-dubbo-metadata-report-redis
dubbo-metadata-report-zookeeper
dubbo-metrics
dubbo-metrics-api
diff --git a/dubbo-config/dubbo-config-api/pom.xml
b/dubbo-config/dubbo-config-api/pom.xml
index 9ed360e947..378c679bf5 100644
--- a/dubbo-config/dubbo-config-api/pom.xml
+++ b/dubbo-config/dubbo-config-api/pom.xml
@@ -207,13 +207,6 @@
</exclusions>
</dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metadata-report-redis</artifactId>
- <version>${project.parent.version}</version>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-configcenter-zookeeper</artifactId>
diff --git a/dubbo-distribution/dubbo-all-shaded/pom.xml
b/dubbo-distribution/dubbo-all-shaded/pom.xml
index c56bac5624..0eb7510b02 100644
--- a/dubbo-distribution/dubbo-all-shaded/pom.xml
+++ b/dubbo-distribution/dubbo-all-shaded/pom.xml
@@ -162,13 +162,6 @@
<scope>compile</scope>
<optional>true</optional>
</dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metadata-report-redis</artifactId>
- <version>${project.version}</version>
- <scope>compile</scope>
- <optional>true</optional>
- </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-metadata-definition-protobuf</artifactId>
@@ -461,7 +454,6 @@
<include>org.apache.dubbo:dubbo-metadata-api</include>
<include>org.apache.dubbo:dubbo-metadata-definition-protobuf</include>
<include>org.apache.dubbo:dubbo-metadata-report-nacos</include>
-
<include>org.apache.dubbo:dubbo-metadata-report-redis</include>
<include>org.apache.dubbo:dubbo-metadata-report-zookeeper</include>
<include>org.apache.dubbo:dubbo-metrics-api</include>
<include>org.apache.dubbo:dubbo-metrics-default</include>
diff --git a/dubbo-distribution/dubbo-all/pom.xml
b/dubbo-distribution/dubbo-all/pom.xml
index 6a7982df13..99b7a90c0b 100644
--- a/dubbo-distribution/dubbo-all/pom.xml
+++ b/dubbo-distribution/dubbo-all/pom.xml
@@ -142,13 +142,6 @@
<scope>compile</scope>
<optional>true</optional>
</dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metadata-report-redis</artifactId>
- <version>${project.version}</version>
- <scope>compile</scope>
- <optional>true</optional>
- </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-metadata-definition-protobuf</artifactId>
@@ -493,7 +486,6 @@
<include>org.apache.dubbo:dubbo-metadata-api</include>
<include>org.apache.dubbo:dubbo-metadata-definition-protobuf</include>
<include>org.apache.dubbo:dubbo-metadata-report-nacos</include>
-
<include>org.apache.dubbo:dubbo-metadata-report-redis</include>
<include>org.apache.dubbo:dubbo-metadata-report-zookeeper</include>
<include>org.apache.dubbo:dubbo-metrics-event</include>
<include>org.apache.dubbo:dubbo-metrics-api</include>
diff --git a/dubbo-distribution/dubbo-bom/pom.xml
b/dubbo-distribution/dubbo-bom/pom.xml
index 11c897b9b8..48afc409d4 100644
--- a/dubbo-distribution/dubbo-bom/pom.xml
+++ b/dubbo-distribution/dubbo-bom/pom.xml
@@ -207,11 +207,6 @@
<artifactId>dubbo-metadata-report-nacos</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metadata-report-redis</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-metadata-processor</artifactId>
diff --git a/dubbo-metadata/dubbo-metadata-report-redis/pom.xml
b/dubbo-metadata/dubbo-metadata-report-redis/pom.xml
deleted file mode 100644
index 2cc33a888c..0000000000
--- a/dubbo-metadata/dubbo-metadata-report-redis/pom.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metadata</artifactId>
- <version>${revision}</version>
- </parent>
-
- <artifactId>dubbo-metadata-report-redis</artifactId>
- <properties>
- <jedis.version>5.1.0</jedis.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metadata-api</artifactId>
- <version>${project.parent.version}</version>
- </dependency>
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>${jedis.version}</version>
- </dependency>
- <dependency>
- <groupId>com.github.codemonstur</groupId>
- <artifactId>embedded-redis</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-slf4j-impl</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-</project>
diff --git
a/dubbo-metadata/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
b/dubbo-metadata/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
deleted file mode 100644
index 6c2493ccff..0000000000
---
a/dubbo-metadata/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
+++ /dev/null
@@ -1,553 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.metadata.store.redis;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.config.configcenter.ConfigItem;
-import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.common.utils.ConcurrentHashMapUtils;
-import org.apache.dubbo.common.utils.ConcurrentHashSet;
-import org.apache.dubbo.common.utils.JsonUtils;
-import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.metadata.MappingChangedEvent;
-import org.apache.dubbo.metadata.MappingListener;
-import org.apache.dubbo.metadata.MetadataInfo;
-import org.apache.dubbo.metadata.ServiceNameMapping;
-import org.apache.dubbo.metadata.report.identifier.BaseMetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;
-import
org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
-import org.apache.dubbo.metadata.report.support.AbstractMetadataReport;
-import org.apache.dubbo.rpc.RpcException;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-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 redis.clients.jedis.JedisPubSub;
-import redis.clients.jedis.Transaction;
-import redis.clients.jedis.params.SetParams;
-import redis.clients.jedis.util.JedisClusterCRC16;
-
-import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
-import static
org.apache.dubbo.common.constants.CommonConstants.CYCLE_REPORT_KEY;
-import static
org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;
-import static
org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPARATOR;
-import static org.apache.dubbo.common.constants.CommonConstants.QUEUES_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;
-import static
org.apache.dubbo.common.constants.LoggerCodeConstants.TRANSPORT_FAILED_RESPONSE;
-import static org.apache.dubbo.metadata.MetadataConstants.META_DATA_STORE_TAG;
-import static
org.apache.dubbo.metadata.ServiceNameMapping.DEFAULT_MAPPING_GROUP;
-import static org.apache.dubbo.metadata.ServiceNameMapping.getAppNames;
-import static
org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_CYCLE_REPORT;
-
-/**
- * RedisMetadataReport
- */
-public class RedisMetadataReport extends AbstractMetadataReport {
-
- private static final String REDIS_DATABASE_KEY = "database";
- private static final ErrorTypeAwareLogger logger =
LoggerFactory.getErrorTypeAwareLogger(RedisMetadataReport.class);
-
- // protected , for test
- protected JedisPool pool;
- private Set<HostAndPort> jedisClusterNodes;
- private int timeout;
- private String password;
- private final String root;
- private final ConcurrentHashMap<String, MappingDataListener>
mappingDataListenerMap = new ConcurrentHashMap<>();
- private SetParams jedisParams = SetParams.setParams();
-
- public RedisMetadataReport(URL url) {
- super(url);
- timeout = url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT);
- password = url.getPassword();
- this.root = url.getGroup(DEFAULT_ROOT);
- if (url.getParameter(CYCLE_REPORT_KEY,
DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {
- // ttl default is twice the cycle-report time
- jedisParams.ex(ONE_DAY_IN_MILLISECONDS * 2);
- }
- if (url.getParameter(CLUSTER_KEY, false)) {
- jedisClusterNodes = new HashSet<>();
- List<URL> urls = url.getBackupUrls();
- for (URL tmpUrl : urls) {
- jedisClusterNodes.add(new HostAndPort(tmpUrl.getHost(),
tmpUrl.getPort()));
- }
- } else {
- int database = url.getParameter(REDIS_DATABASE_KEY, 0);
- pool = new JedisPool(new JedisPoolConfig(), url.getHost(),
url.getPort(), timeout, password, database);
- }
- }
-
- @Override
- protected void doStoreProviderMetadata(MetadataIdentifier
providerMetadataIdentifier, String serviceDefinitions) {
- this.storeMetadata(providerMetadataIdentifier, serviceDefinitions);
- }
-
- @Override
- protected void doStoreConsumerMetadata(MetadataIdentifier
consumerMetadataIdentifier, String value) {
- this.storeMetadata(consumerMetadataIdentifier, value);
- }
-
- @Override
- protected void doSaveMetadata(ServiceMetadataIdentifier
serviceMetadataIdentifier, URL url) {
- this.storeMetadata(serviceMetadataIdentifier,
URL.encode(url.toFullString()));
- }
-
- @Override
- protected void doRemoveMetadata(ServiceMetadataIdentifier
serviceMetadataIdentifier) {
- this.deleteMetadata(serviceMetadataIdentifier);
- }
-
- @Override
- protected List<String> doGetExportedURLs(ServiceMetadataIdentifier
metadataIdentifier) {
- String content = getMetadata(metadataIdentifier);
- if (StringUtils.isEmpty(content)) {
- return Collections.emptyList();
- }
- return new ArrayList<>(Arrays.asList(URL.decode(content)));
- }
-
- @Override
- protected void doSaveSubscriberData(SubscriberMetadataIdentifier
subscriberMetadataIdentifier, String urlListStr) {
- this.storeMetadata(subscriberMetadataIdentifier, urlListStr);
- }
-
- @Override
- protected String doGetSubscribedURLs(SubscriberMetadataIdentifier
subscriberMetadataIdentifier) {
- return this.getMetadata(subscriberMetadataIdentifier);
- }
-
- @Override
- public String getServiceDefinition(MetadataIdentifier metadataIdentifier) {
- return this.getMetadata(metadataIdentifier);
- }
-
- private void storeMetadata(BaseMetadataIdentifier metadataIdentifier,
String v) {
- if (pool != null) {
- storeMetadataStandalone(metadataIdentifier, v);
- } else {
- storeMetadataInCluster(metadataIdentifier, v);
- }
- }
-
- private void storeMetadataInCluster(BaseMetadataIdentifier
metadataIdentifier, String v) {
- try (JedisCluster jedisCluster =
- new JedisCluster(jedisClusterNodes, timeout, timeout, 2,
password, new GenericObjectPoolConfig<>())) {
- jedisCluster.set(metadataIdentifier.getIdentifierKey() +
META_DATA_STORE_TAG, v, jedisParams);
- } catch (Throwable e) {
- String msg =
- "Failed to put " + metadataIdentifier + " to redis cluster
" + v + ", cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- }
-
- private void storeMetadataStandalone(BaseMetadataIdentifier
metadataIdentifier, String v) {
- try (Jedis jedis = pool.getResource()) {
- jedis.set(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY),
v, jedisParams);
- } catch (Throwable e) {
- String msg = "Failed to put " + metadataIdentifier + " to redis "
+ v + ", cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- }
-
- private void deleteMetadata(BaseMetadataIdentifier metadataIdentifier) {
- if (pool != null) {
- deleteMetadataStandalone(metadataIdentifier);
- } else {
- deleteMetadataInCluster(metadataIdentifier);
- }
- }
-
- private void deleteMetadataInCluster(BaseMetadataIdentifier
metadataIdentifier) {
- try (JedisCluster jedisCluster =
- new JedisCluster(jedisClusterNodes, timeout, timeout, 2,
password, new GenericObjectPoolConfig<>())) {
- jedisCluster.del(metadataIdentifier.getIdentifierKey() +
META_DATA_STORE_TAG);
- } catch (Throwable e) {
- String msg = "Failed to delete " + metadataIdentifier + " from
redis cluster , cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- }
-
- private void deleteMetadataStandalone(BaseMetadataIdentifier
metadataIdentifier) {
- try (Jedis jedis = pool.getResource()) {
- jedis.del(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));
- } catch (Throwable e) {
- String msg = "Failed to delete " + metadataIdentifier + " from
redis , cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- }
-
- private String getMetadata(BaseMetadataIdentifier metadataIdentifier) {
- if (pool != null) {
- return getMetadataStandalone(metadataIdentifier);
- } else {
- return getMetadataInCluster(metadataIdentifier);
- }
- }
-
- private String getMetadataInCluster(BaseMetadataIdentifier
metadataIdentifier) {
- try (JedisCluster jedisCluster =
- new JedisCluster(jedisClusterNodes, timeout, timeout, 2,
password, new GenericObjectPoolConfig<>())) {
- return jedisCluster.get(metadataIdentifier.getIdentifierKey() +
META_DATA_STORE_TAG);
- } catch (Throwable e) {
- String msg = "Failed to get " + metadataIdentifier + " from redis
cluster , cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- }
-
- private String getMetadataStandalone(BaseMetadataIdentifier
metadataIdentifier) {
- try (Jedis jedis = pool.getResource()) {
- return
jedis.get(metadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));
- } catch (Throwable e) {
- String msg = "Failed to get " + metadataIdentifier + " from redis
, cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- }
-
- /**
- * Store class and application names using Redis hashes
- * key: default 'dubbo:mapping'
- * field: class (serviceInterface)
- * value: application_names
- * @param serviceInterface field(class)
- * @param defaultMappingGroup {@link
ServiceNameMapping#DEFAULT_MAPPING_GROUP}
- * @param newConfigContent new application_names
- * @param ticket previous application_names
- * @return
- */
- @Override
- public boolean registerServiceAppMapping(
- String serviceInterface, String defaultMappingGroup, String
newConfigContent, Object ticket) {
- try {
- if (null != ticket && !(ticket instanceof String)) {
- throw new IllegalArgumentException("redis publishConfigCas
requires stat type ticket");
- }
- String pathKey = buildMappingKey(defaultMappingGroup);
-
- return storeMapping(pathKey, serviceInterface, newConfigContent,
(String) ticket);
- } catch (Exception e) {
- logger.warn(TRANSPORT_FAILED_RESPONSE, "", "", "redis
publishConfigCas failed.", e);
- return false;
- }
- }
-
- private boolean storeMapping(String key, String field, String value,
String ticket) {
- if (pool != null) {
- return storeMappingStandalone(key, field, value, ticket);
- } else {
- return storeMappingInCluster(key, field, value, ticket);
- }
- }
-
- /**
- * use 'watch' to implement cas.
- * Find information about slot distribution by key.
- */
- private boolean storeMappingInCluster(String key, String field, String
value, String ticket) {
- try (JedisCluster jedisCluster =
- new JedisCluster(jedisClusterNodes, timeout, timeout, 2,
password, new GenericObjectPoolConfig<>())) {
- Jedis jedis = new
Jedis(jedisCluster.getConnectionFromSlot(JedisClusterCRC16.getSlot(key)));
- jedis.watch(key);
- String oldValue = jedis.hget(key, field);
- if (null == oldValue || null == ticket || oldValue.equals(ticket))
{
- Transaction transaction = jedis.multi();
- transaction.hset(key, field, value);
- List<Object> result = transaction.exec();
- if (null != result) {
- jedisCluster.publish(buildPubSubKey(), field);
- return true;
- }
- } else {
- jedis.unwatch();
- }
- jedis.close();
- } catch (Throwable e) {
- String msg = "Failed to put " + key + ":" + field + " to redis " +
value + ", cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- return false;
- }
-
- /**
- * use 'watch' to implement cas.
- * Find information about slot distribution by key.
- */
- private boolean storeMappingStandalone(String key, String field, String
value, String ticket) {
- try (Jedis jedis = pool.getResource()) {
- jedis.watch(key);
- String oldValue = jedis.hget(key, field);
- if (null == oldValue || null == ticket || oldValue.equals(ticket))
{
- Transaction transaction = jedis.multi();
- transaction.hset(key, field, value);
- List<Object> result = transaction.exec();
- if (null != result) {
- jedis.publish(buildPubSubKey(), field);
- return true;
- }
- }
- jedis.unwatch();
- } catch (Throwable e) {
- String msg = "Failed to put " + key + ":" + field + " to redis " +
value + ", cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- return false;
- }
-
- /**
- * build mapping key
- * @param defaultMappingGroup {@link
ServiceNameMapping#DEFAULT_MAPPING_GROUP}
- * @return
- */
- private String buildMappingKey(String defaultMappingGroup) {
- return this.root + GROUP_CHAR_SEPARATOR + defaultMappingGroup;
- }
-
- /**
- * build pub/sub key
- */
- private String buildPubSubKey() {
- return buildMappingKey(DEFAULT_MAPPING_GROUP) + GROUP_CHAR_SEPARATOR +
QUEUES_KEY;
- }
-
- /**
- * get content and use content to complete cas
- * @param serviceKey class
- * @param group {@link ServiceNameMapping#DEFAULT_MAPPING_GROUP}
- */
- @Override
- public ConfigItem getConfigItem(String serviceKey, String group) {
- String key = buildMappingKey(group);
- String content = getMappingData(key, serviceKey);
-
- return new ConfigItem(content, content);
- }
-
- /**
- * get current application_names
- */
- private String getMappingData(String key, String field) {
- if (pool != null) {
- return getMappingDataStandalone(key, field);
- } else {
- return getMappingDataInCluster(key, field);
- }
- }
-
- private String getMappingDataInCluster(String key, String field) {
- try (JedisCluster jedisCluster =
- new JedisCluster(jedisClusterNodes, timeout, timeout, 2,
password, new GenericObjectPoolConfig<>())) {
- return jedisCluster.hget(key, field);
- } catch (Throwable e) {
- String msg = "Failed to get " + key + ":" + field + " from redis
cluster , cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- }
-
- private String getMappingDataStandalone(String key, String field) {
- try (Jedis jedis = pool.getResource()) {
- return jedis.hget(key, field);
- } catch (Throwable e) {
- String msg = "Failed to get " + key + ":" + field + " from redis ,
cause: " + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- throw new RpcException(msg, e);
- }
- }
-
- /**
- * remove listener. If have no listener,thread will dead
- */
- @Override
- public void removeServiceAppMappingListener(String serviceKey,
MappingListener listener) {
- MappingDataListener mappingDataListener =
mappingDataListenerMap.get(buildPubSubKey());
- if (null != mappingDataListener) {
- NotifySub notifySub = mappingDataListener.getNotifySub();
- notifySub.removeListener(serviceKey, listener);
- if (notifySub.isEmpty()) {
- mappingDataListener.shutdown();
- }
- }
- }
-
- /**
- * Start a thread and subscribe to {@link this#buildPubSubKey()}.
- * Notify {@link MappingListener} if there is a change in the
'application_names' message.
- */
- @Override
- public Set<String> getServiceAppMapping(String serviceKey, MappingListener
listener, URL url) {
- MappingDataListener mappingDataListener =
- ConcurrentHashMapUtils.computeIfAbsent(mappingDataListenerMap,
buildPubSubKey(), k -> {
- MappingDataListener dataListener = new
MappingDataListener(buildPubSubKey());
- dataListener.start();
- return dataListener;
- });
- mappingDataListener.getNotifySub().addListener(serviceKey, listener);
- return this.getServiceAppMapping(serviceKey, url);
- }
-
- @Override
- public Set<String> getServiceAppMapping(String serviceKey, URL url) {
- String key = buildMappingKey(DEFAULT_MAPPING_GROUP);
- return getAppNames(getMappingData(key, serviceKey));
- }
-
- @Override
- public MetadataInfo getAppMetadata(SubscriberMetadataIdentifier
identifier, Map<String, String> instanceMetadata) {
- String content = this.getMetadata(identifier);
- return JsonUtils.toJavaObject(content, MetadataInfo.class);
- }
-
- @Override
- public void publishAppMetadata(SubscriberMetadataIdentifier identifier,
MetadataInfo metadataInfo) {
- this.storeMetadata(identifier, metadataInfo.getContent());
- }
-
- @Override
- public void unPublishAppMetadata(SubscriberMetadataIdentifier identifier,
MetadataInfo metadataInfo) {
- this.deleteMetadata(identifier);
- }
-
- // for test
- public MappingDataListener getMappingDataListener() {
- return mappingDataListenerMap.get(buildPubSubKey());
- }
-
- /**
- * Listen for changes in the 'application_names' message and notify the
listener.
- */
- class NotifySub extends JedisPubSub {
-
- private final Map<String, Set<MappingListener>> listeners = new
ConcurrentHashMap<>();
-
- public void addListener(String key, MappingListener listener) {
- Set<MappingListener> listenerSet = listeners.computeIfAbsent(key,
k -> new ConcurrentHashSet<>());
- listenerSet.add(listener);
- }
-
- public void removeListener(String serviceKey, MappingListener
listener) {
- Set<MappingListener> listenerSet = this.listeners.get(serviceKey);
- if (listenerSet != null) {
- listenerSet.remove(listener);
- if (listenerSet.isEmpty()) {
- this.listeners.remove(serviceKey);
- }
- }
- }
-
- public Boolean isEmpty() {
- return this.listeners.isEmpty();
- }
-
- @Override
- public void onMessage(String key, String msg) {
- logger.info("sub from redis:" + key + " message:" + msg);
- String applicationNames =
getMappingData(buildMappingKey(DEFAULT_MAPPING_GROUP), msg);
- MappingChangedEvent mappingChangedEvent = new
MappingChangedEvent(msg, getAppNames(applicationNames));
- if (!listeners.get(msg).isEmpty()) {
- for (MappingListener mappingListener : listeners.get(msg)) {
- mappingListener.onEvent(mappingChangedEvent);
- }
- }
- }
-
- @Override
- public void onPMessage(String pattern, String key, String msg) {
- onMessage(key, msg);
- }
-
- @Override
- public void onPSubscribe(String pattern, int subscribedChannels) {
- super.onPSubscribe(pattern, subscribedChannels);
- }
- }
-
- /**
- * Subscribe application names change message.
- */
- class MappingDataListener extends Thread {
-
- private String path;
-
- private final NotifySub notifySub = new NotifySub();
- // for test
- protected volatile boolean running = true;
-
- public MappingDataListener(String path) {
- this.path = path;
- }
-
- public NotifySub getNotifySub() {
- return notifySub;
- }
-
- @Override
- public void run() {
- while (running) {
- if (pool != null) {
- try (Jedis jedis = pool.getResource()) {
- jedis.subscribe(notifySub, path);
- } catch (Throwable e) {
- String msg = "Failed to subscribe " + path + ", cause:
" + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg,
e);
- throw new RpcException(msg, e);
- }
- } else {
- try (JedisCluster jedisCluster = new JedisCluster(
- jedisClusterNodes, timeout, timeout, 2, password,
new GenericObjectPoolConfig<>())) {
- jedisCluster.subscribe(notifySub, path);
- } catch (Throwable e) {
- String msg = "Failed to subscribe " + path + ", cause:
" + e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg,
e);
- throw new RpcException(msg, e);
- }
- }
- }
- }
-
- public void shutdown() {
- try {
- running = false;
- notifySub.unsubscribe(path);
- } catch (Throwable e) {
- String msg = "Failed to unsubscribe " + path + ", cause: " +
e.getMessage();
- logger.error(TRANSPORT_FAILED_RESPONSE, "", "", msg, e);
- }
- }
- }
-}
diff --git
a/dubbo-metadata/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReportFactory.java
b/dubbo-metadata/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReportFactory.java
deleted file mode 100644
index d871877f6b..0000000000
---
a/dubbo-metadata/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReportFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.metadata.store.redis;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.metadata.report.MetadataReport;
-import org.apache.dubbo.metadata.report.support.AbstractMetadataReportFactory;
-
-/**
- * RedisMetadataReportFactory.
- */
-public class RedisMetadataReportFactory extends AbstractMetadataReportFactory {
-
- @Override
- public MetadataReport createMetadataReport(URL url) {
- return new RedisMetadataReport(url);
- }
-}
diff --git
a/dubbo-metadata/dubbo-metadata-report-redis/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory
b/dubbo-metadata/dubbo-metadata-report-redis/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory
deleted file mode 100644
index 2e6effa12b..0000000000
---
a/dubbo-metadata/dubbo-metadata-report-redis/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory
+++ /dev/null
@@ -1 +0,0 @@
-redis=org.apache.dubbo.metadata.store.redis.RedisMetadataReportFactory
diff --git
a/dubbo-metadata/dubbo-metadata-report-redis/src/test/java/org/apache/dubbo/metadata/store/redis/RedisMetadata4TstService.java
b/dubbo-metadata/dubbo-metadata-report-redis/src/test/java/org/apache/dubbo/metadata/store/redis/RedisMetadata4TstService.java
deleted file mode 100644
index 357b217545..0000000000
---
a/dubbo-metadata/dubbo-metadata-report-redis/src/test/java/org/apache/dubbo/metadata/store/redis/RedisMetadata4TstService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.metadata.store.redis;
-
-/**
- * 2018/10/26
- */
-public interface RedisMetadata4TstService {
-
- int getCounter();
-
- void printResult(String var);
-}
diff --git
a/dubbo-metadata/dubbo-metadata-report-redis/src/test/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReportTest.java
b/dubbo-metadata/dubbo-metadata-report-redis/src/test/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReportTest.java
deleted file mode 100644
index 85569d49c9..0000000000
---
a/dubbo-metadata/dubbo-metadata-report-redis/src/test/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReportTest.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo.metadata.store.redis;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.config.configcenter.ConfigItem;
-import org.apache.dubbo.common.utils.JsonUtils;
-import org.apache.dubbo.common.utils.NetUtils;
-import org.apache.dubbo.metadata.MappingChangedEvent;
-import org.apache.dubbo.metadata.MappingListener;
-import org.apache.dubbo.metadata.MetadataInfo;
-import org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder;
-import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-import
org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
-import org.apache.dubbo.rpc.RpcException;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestInfo;
-import org.junit.jupiter.api.condition.DisabledOnOs;
-import org.junit.jupiter.api.condition.OS;
-import redis.clients.jedis.Jedis;
-import redis.clients.jedis.exceptions.JedisConnectionException;
-import redis.clients.jedis.exceptions.JedisDataException;
-import redis.embedded.RedisServer;
-
-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;
-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;
-import static
org.apache.dubbo.common.constants.CommonConstants.SYNC_REPORT_KEY;
-import static
org.apache.dubbo.metadata.ServiceNameMapping.DEFAULT_MAPPING_GROUP;
-import static redis.embedded.RedisServer.newRedisServer;
-
-@DisabledOnOs(OS.WINDOWS)
-class RedisMetadataReportTest {
-
- private static final String REDIS_URL_TEMPLATE = "redis://%slocalhost:%d",
- REDIS_PASSWORD = "チェリー",
- REDIS_URL_AUTH_SECTION = "username:" + REDIS_PASSWORD + "@";
-
- RedisMetadataReport redisMetadataReport;
- RedisMetadataReport syncRedisMetadataReport;
- RedisServer redisServer;
- URL registryUrl;
-
- @BeforeEach
- public void constructor(final TestInfo testInfo) {
- final boolean usesAuthentication = usesAuthentication(testInfo);
- int redisPort = 0;
- IOException exception = null;
-
- for (int i = 0; i < 10; i++) {
- try {
- redisPort = NetUtils.getAvailablePort(30000 + new
Random().nextInt(10000));
- redisServer = newRedisServer()
- .port(redisPort)
- // set maxheap to fix Windows error 0x70 while
starting redis
- // .settingIf(SystemUtils.IS_OS_WINDOWS, "maxheap
128mb")
- .settingIf(usesAuthentication, "requirepass " +
REDIS_PASSWORD)
- .build();
- this.redisServer.start();
- exception = null;
- } catch (IOException e) {
- e.printStackTrace();
- exception = e;
- }
- if (exception == null) {
- break;
- }
- }
-
- Assertions.assertNull(exception);
- registryUrl = newRedisUrl(usesAuthentication, redisPort);
- redisMetadataReport = (RedisMetadataReport) new
RedisMetadataReportFactory().createMetadataReport(registryUrl);
- URL syncRegistryUrl = registryUrl.addParameter(SYNC_REPORT_KEY,
"true");
- syncRedisMetadataReport =
- (RedisMetadataReport) new
RedisMetadataReportFactory().createMetadataReport(syncRegistryUrl);
- }
-
- private static boolean usesAuthentication(final TestInfo testInfo) {
- final String methodName = testInfo.getTestMethod().get().getName();
- return "testAuthRedisMetadata".equals(methodName) ||
"testWrongAuthRedisMetadata".equals(methodName);
- }
-
- private static URL newRedisUrl(final boolean usesAuthentication, final int
redisPort) {
- final String urlAuthSection = usesAuthentication ?
REDIS_URL_AUTH_SECTION : "";
- return URL.valueOf(String.format(REDIS_URL_TEMPLATE, urlAuthSection,
redisPort));
- }
-
- @AfterEach
- public void tearDown() throws Exception {
- this.redisServer.stop();
- }
-
- @Test
- void testAsyncStoreProvider() throws ClassNotFoundException {
- testStoreProvider(redisMetadataReport, "1.0.0.redis.md.p1", 3000);
- }
-
- @Test
- void testSyncStoreProvider() throws ClassNotFoundException {
- testStoreProvider(syncRedisMetadataReport, "1.0.0.redis.md.p2", 3);
- }
-
- private void testStoreProvider(RedisMetadataReport redisMetadataReport,
String version, long moreTime)
- throws ClassNotFoundException {
- String interfaceName =
"org.apache.dubbo.metadata.store.redis.RedisMetadata4TstService";
- String group = null;
- String application = "vic.redis.md";
- MetadataIdentifier providerMetadataIdentifier =
- storePrivider(redisMetadataReport, interfaceName, version,
group, application);
- Jedis jedis = null;
- try {
- jedis = redisMetadataReport.pool.getResource();
- String keyTmp =
providerMetadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY);
- String value = jedis.get(keyTmp);
- if (value == null) {
- Thread.sleep(moreTime);
- value = jedis.get(keyTmp);
- }
-
- Assertions.assertNotNull(value);
-
- FullServiceDefinition fullServiceDefinition =
JsonUtils.toJavaObject(value, FullServiceDefinition.class);
-
Assertions.assertEquals(fullServiceDefinition.getParameters().get("paramTest"),
"redisTest");
- } catch (Throwable e) {
- throw new RpcException("Failed to put to redis . cause: " +
e.getMessage(), e);
- } finally {
- if (jedis != null) {
-
jedis.del(providerMetadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));
- }
- redisMetadataReport.pool.close();
- }
- }
-
- @Test
- void testAsyncStoreConsumer() throws ClassNotFoundException {
- testStoreConsumer(redisMetadataReport, "1.0.0.redis.md.c1", 3000);
- }
-
- @Test
- void testSyncStoreConsumer() throws ClassNotFoundException {
- testStoreConsumer(syncRedisMetadataReport, "1.0.0.redis.md.c2", 3);
- }
-
- private void testStoreConsumer(RedisMetadataReport redisMetadataReport,
String version, long moreTime)
- throws ClassNotFoundException {
- String interfaceName =
"org.apache.dubbo.metadata.store.redis.RedisMetadata4TstService";
- String group = null;
- String application = "vic.redis.md";
- MetadataIdentifier consumerMetadataIdentifier =
- storeConsumer(redisMetadataReport, interfaceName, version,
group, application);
- Jedis jedis = null;
- try {
- jedis = redisMetadataReport.pool.getResource();
- String keyTmp =
consumerMetadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY);
- String value = jedis.get(keyTmp);
- if (value == null) {
- Thread.sleep(moreTime);
- value = jedis.get(keyTmp);
- }
- Assertions.assertEquals(value,
"{\"paramConsumerTest\":\"redisCm\"}");
- } catch (Throwable e) {
- throw new RpcException("Failed to put to redis . cause: " +
e.getMessage(), e);
- } finally {
- if (jedis != null) {
-
jedis.del(consumerMetadataIdentifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));
- }
- redisMetadataReport.pool.close();
- }
- }
-
- private MetadataIdentifier storePrivider(
- RedisMetadataReport redisMetadataReport,
- String interfaceName,
- String version,
- String group,
- String application)
- throws ClassNotFoundException {
- URL url = URL.valueOf("xxx://" +
NetUtils.getLocalAddress().getHostName() + ":4444/" + interfaceName
- + "?paramTest=redisTest&version=" + version + "&application="
+ application
- + (group == null ? "" : "&group=" + group));
-
- MetadataIdentifier providerMetadataIdentifier =
- new MetadataIdentifier(interfaceName, version, group,
PROVIDER_SIDE, application);
- Class interfaceClass = Class.forName(interfaceName);
- FullServiceDefinition fullServiceDefinition =
- ServiceDefinitionBuilder.buildFullDefinition(interfaceClass,
url.getParameters());
-
- redisMetadataReport.storeProviderMetadata(providerMetadataIdentifier,
fullServiceDefinition);
- try {
- Thread.sleep(300);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return providerMetadataIdentifier;
- }
-
- private MetadataIdentifier storeConsumer(
- RedisMetadataReport redisMetadataReport,
- String interfaceName,
- String version,
- String group,
- String application)
- throws ClassNotFoundException {
- URL url = URL.valueOf("xxx://" +
NetUtils.getLocalAddress().getHostName() + ":4444/" + interfaceName
- + "?version=" + version + "&application=" + application +
(group == null ? "" : "&group=" + group));
-
- MetadataIdentifier consumerMetadataIdentifier =
- new MetadataIdentifier(interfaceName, version, group,
CONSUMER_SIDE, application);
- Class interfaceClass = Class.forName(interfaceName);
-
- Map<String, String> tmp = new HashMap<>();
- tmp.put("paramConsumerTest", "redisCm");
- redisMetadataReport.storeConsumerMetadata(consumerMetadataIdentifier,
tmp);
- try {
- Thread.sleep(300);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return consumerMetadataIdentifier;
- }
-
- @Test
- void testAuthRedisMetadata() throws ClassNotFoundException {
- testStoreProvider(redisMetadataReport, "1.0.0.redis.md.p1", 3000);
- }
-
- @Test
- void testWrongAuthRedisMetadata() throws ClassNotFoundException {
- redisMetadataReport = (RedisMetadataReport) new
RedisMetadataReportFactory().createMetadataReport(registryUrl);
- try {
- testStoreProvider(redisMetadataReport, "1.0.0.redis.md.p1", 3000);
- } catch (RpcException e) {
- if (e.getCause() instanceof JedisConnectionException
- && e.getCause().getCause() instanceof JedisDataException) {
- Assertions.assertEquals(
- "WRONGPASS invalid username-password pair or user is
disabled.",
- e.getCause().getCause().getMessage());
- } else {
- Assertions.fail("no invalid password exception!");
- }
- }
- }
-
- @Test
- void testRegisterServiceAppMapping() throws InterruptedException {
- String serviceKey1 =
"org.apache.dubbo.metadata.store.redis.RedisMetadata4TstService";
- String serviceKey2 =
"org.apache.dubbo.metadata.store.redis.RedisMetadata4TstService2";
-
- String appNames1 = "test1";
- String appNames2 = "test1,test2";
- CountDownLatch latch = new CountDownLatch(2);
- CountDownLatch latch2 = new CountDownLatch(2);
-
- MappingListener mappingListener = new MappingListener() {
- @Override
- public void onEvent(MappingChangedEvent event) {
- Set<String> apps = event.getApps();
- if (apps.size() == 1) {
- Assertions.assertTrue(apps.contains("test1"));
- } else {
- Assertions.assertTrue(apps.contains("test1"));
- Assertions.assertTrue(apps.contains("test2"));
- }
- if (serviceKey1.equals(event.getServiceKey())) {
- latch.countDown();
- } else if (serviceKey2.equals(event.getServiceKey())) {
- latch2.countDown();
- }
- }
-
- @Override
- public void stop() {}
- };
-
- Set<String> serviceAppMapping =
- redisMetadataReport.getServiceAppMapping(serviceKey1,
mappingListener, registryUrl);
-
- Assertions.assertTrue(serviceAppMapping.isEmpty());
-
- ConfigItem configItem = redisMetadataReport.getConfigItem(serviceKey1,
DEFAULT_MAPPING_GROUP);
-
- redisMetadataReport.registerServiceAppMapping(
- serviceKey1, DEFAULT_MAPPING_GROUP, appNames1,
configItem.getTicket());
- configItem = redisMetadataReport.getConfigItem(serviceKey1,
DEFAULT_MAPPING_GROUP);
-
- redisMetadataReport.registerServiceAppMapping(
- serviceKey1, DEFAULT_MAPPING_GROUP, appNames2,
configItem.getTicket());
-
- latch.await();
-
- serviceAppMapping =
redisMetadataReport.getServiceAppMapping(serviceKey2, mappingListener,
registryUrl);
-
- Assertions.assertTrue(serviceAppMapping.isEmpty());
-
- configItem = redisMetadataReport.getConfigItem(serviceKey2,
DEFAULT_MAPPING_GROUP);
-
- redisMetadataReport.registerServiceAppMapping(
- serviceKey2, DEFAULT_MAPPING_GROUP, appNames1,
configItem.getTicket());
- configItem = redisMetadataReport.getConfigItem(serviceKey2,
DEFAULT_MAPPING_GROUP);
- redisMetadataReport.registerServiceAppMapping(
- serviceKey2, DEFAULT_MAPPING_GROUP, appNames2,
configItem.getTicket());
-
- latch2.await();
- RedisMetadataReport.MappingDataListener mappingDataListener =
redisMetadataReport.getMappingDataListener();
- Assertions.assertTrue(mappingDataListener.running);
- Assertions.assertTrue(!mappingDataListener.getNotifySub().isEmpty());
-
- redisMetadataReport.removeServiceAppMappingListener(serviceKey1,
mappingListener);
- Assertions.assertTrue(mappingDataListener.running);
- Assertions.assertTrue(!mappingDataListener.getNotifySub().isEmpty());
- redisMetadataReport.removeServiceAppMappingListener(serviceKey2,
mappingListener);
- Assertions.assertTrue(!mappingDataListener.running);
- Assertions.assertTrue(mappingDataListener.getNotifySub().isEmpty());
- }
-
- @Test
- void testAppMetadata() {
- String serviceKey =
"org.apache.dubbo.metadata.store.redis.RedisMetadata4TstService";
- String appName = "demo";
- URL url = URL.valueOf("test://127.0.0.1:8888/" + serviceKey);
-
- MetadataInfo metadataInfo = new MetadataInfo(appName);
- metadataInfo.addService(url);
- SubscriberMetadataIdentifier identifier =
- new SubscriberMetadataIdentifier(appName,
metadataInfo.calAndGetRevision());
- MetadataInfo appMetadata =
redisMetadataReport.getAppMetadata(identifier, Collections.emptyMap());
- Assertions.assertNull(appMetadata);
-
- redisMetadataReport.publishAppMetadata(identifier, metadataInfo);
- appMetadata = redisMetadataReport.getAppMetadata(identifier,
Collections.emptyMap());
- Assertions.assertNotNull(appMetadata);
- Assertions.assertEquals(appMetadata.toFullString(),
metadataInfo.toFullString());
- redisMetadataReport.unPublishAppMetadata(identifier, metadataInfo);
- appMetadata = redisMetadataReport.getAppMetadata(identifier,
Collections.emptyMap());
- Assertions.assertNull(appMetadata);
- }
-}
diff --git
a/dubbo-metadata/dubbo-metadata-report-redis/src/test/resources/log4j2-test.xml
b/dubbo-metadata/dubbo-metadata-report-redis/src/test/resources/log4j2-test.xml
deleted file mode 100644
index ba99f52cc2..0000000000
---
a/dubbo-metadata/dubbo-metadata-report-redis/src/test/resources/log4j2-test.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one or more
- ~ contributor license agreements. See the NOTICE file distributed with
- ~ this work for additional information regarding copyright ownership.
- ~ The ASF licenses this file to You under the Apache License, Version 2.0
- ~ (the "License"); you may not use this file except in compliance with
- ~ the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<Configuration status="WARN">
- <Appenders>
- <Console name="Console" target="SYSTEM_OUT" follow="true">
- <PatternLayout pattern="%d{HH:mm:ss.SSS} |-%highlight{%-5p} [%t]
%40.40c:%-3L -|
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect,org.junit,org.mockito)}"
charset="UTF-8"/>
- </Console>
- </Appenders>
- <Loggers>
- <Root level="info">
- <AppenderRef ref="Console"/>
- </Root>
- </Loggers>
-</Configuration>
diff --git a/dubbo-metadata/pom.xml b/dubbo-metadata/pom.xml
index 81af6197aa..d4dd9e1f81 100644
--- a/dubbo-metadata/pom.xml
+++ b/dubbo-metadata/pom.xml
@@ -31,7 +31,6 @@
<module>dubbo-metadata-definition-protobuf</module>
<module>dubbo-metadata-processor</module>
<module>dubbo-metadata-report-zookeeper</module>
- <module>dubbo-metadata-report-redis</module>
<module>dubbo-metadata-report-nacos</module>
</modules>
diff --git a/dubbo-test/dubbo-dependencies-all/pom.xml
b/dubbo-test/dubbo-dependencies-all/pom.xml
index 529a5233bf..35c6bc7118 100644
--- a/dubbo-test/dubbo-dependencies-all/pom.xml
+++ b/dubbo-test/dubbo-dependencies-all/pom.xml
@@ -134,11 +134,6 @@
<artifactId>dubbo-metadata-report-nacos</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-metadata-report-redis</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-metadata-processor</artifactId>