You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2020/09/08 06:05:00 UTC
[dubbo] branch 3.0 updated: zookeeper metadata impl
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new f6542a2 zookeeper metadata impl
f6542a2 is described below
commit f6542a25d246fe893dc6745d8b45581ab70758dd
Author: ken.lj <ke...@gmail.com>
AuthorDate: Tue Sep 8 14:02:17 2020 +0800
zookeeper metadata impl
---
.../src/main/resources/spring/dubbo-consumer.xml | 4 +-
.../store/zookeeper/ZookeeperMetadataReport.java | 61 ++++++++++++++++++++++
2 files changed, 63 insertions(+), 2 deletions(-)
diff --git a/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml b/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml
index 9225959..5475752 100644
--- a/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml
+++ b/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml
@@ -30,10 +30,10 @@
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
- <dubbo:reference provided-by="demo-provider" id="demoService" check="false"
+ <dubbo:reference id="demoService" check="false"
interface="org.apache.dubbo.demo.DemoService"/>
- <dubbo:reference provided-by="demo-provider" version="1.0.0" group="greeting" id="greetingService" check="false"
+ <dubbo:reference version="1.0.0" group="greeting" id="greetingService" check="false"
interface="org.apache.dubbo.demo.GreetingService"/>
</beans>
diff --git a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
index 9ca2e42..d7abde3 100644
--- a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
+++ b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
@@ -20,19 +20,30 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
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.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.remoting.zookeeper.ChildListener;
import org.apache.dubbo.remoting.zookeeper.ZookeeperClient;
import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
+import com.google.gson.Gson;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;
@@ -48,6 +59,10 @@ public class ZookeeperMetadataReport extends AbstractMetadataReport {
final ZookeeperClient zkClient;
+ private Gson gson = new Gson();
+
+ private Map<String, ChildListener> listenerMap = new ConcurrentHashMap<>();
+
public ZookeeperMetadataReport(URL url, ZookeeperTransporter zookeeperTransporter) {
super(url);
if (url.isAnyHost()) {
@@ -120,4 +135,50 @@ public class ZookeeperMetadataReport extends AbstractMetadataReport {
return toRootDir() + metadataIdentifier.getUniqueKey(KeyTypeEnum.PATH);
}
+ @Override
+ public void publishAppMetadata(SubscriberMetadataIdentifier identifier, MetadataInfo metadataInfo) {
+ String path = getNodePath(identifier);
+ if (StringUtils.isBlank(zkClient.getContent(path))) {
+ zkClient.create(path, gson.toJson(metadataInfo), false);
+ }
+ }
+
+ @Override
+ public void registerServiceAppMapping(String serviceKey, String application, URL url) {
+ String path = toRootDir() + serviceKey + PATH_SEPARATOR + application;
+ if (StringUtils.isBlank(zkClient.getContent(path))) {
+ Map<String, String> value = new HashMap<>();
+ value.put("timestamp", String.valueOf(System.currentTimeMillis()));
+ zkClient.create(path, gson.toJson(value), false);
+ }
+ }
+
+ @Override
+ public MetadataInfo getAppMetadata(SubscriberMetadataIdentifier identifier, Map<String, String> instanceMetadata) {
+ String content = zkClient.getContent(getNodePath(identifier));
+ return gson.fromJson(content, MetadataInfo.class);
+ }
+
+ @Override
+ public Set<String> getServiceAppMapping(String serviceKey, MappingListener listener, URL url) {
+ Set<String> appNameSet = new HashSet<>();
+ String path = toRootDir() + serviceKey;
+ appNameSet.addAll(zkClient.getChildren(path));
+
+ if (null == listenerMap.get(path)) {
+ ChildListener zkListener = new ChildListener() {
+ @Override
+ public void childChanged(String path, List<String> children) {
+ MappingChangedEvent event = new MappingChangedEvent();
+ event.setServiceKey(serviceKey);
+ event.setApps(null != children ? new HashSet<>(children): null);
+ listener.onEvent(event);
+ }
+ };
+ zkClient.addChildListener(path, zkListener);
+ listenerMap.put(path, zkListener);
+ }
+
+ return appNameSet;
+ }
}