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 2019/06/14 06:02:01 UTC
[dubbo] branch performance-tuning-2.7.x updated: remove
ProviderConsumerRegTable in registry module, use ApplicationModel instead.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch performance-tuning-2.7.x
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/performance-tuning-2.7.x by this push:
new c48c5cf remove ProviderConsumerRegTable in registry module, use ApplicationModel instead.
c48c5cf is described below
commit c48c5cfa1d9fe05fb6c3f5198638eb260759a8a2
Author: ken.lj <ke...@gmail.com>
AuthorDate: Fri Jun 14 13:56:35 2019 +0800
remove ProviderConsumerRegTable in registry module, use ApplicationModel instead.
---
.../org/apache/dubbo/rpc/cluster/Directory.java | 2 +
.../rpc/cluster/directory/StaticDirectory.java | 5 +
.../cluster/support/AbstractClusterInvoker.java | 4 +
.../java/org/apache/dubbo/qos/command/impl/Ls.java | 9 +-
.../org/apache/dubbo/qos/command/impl/Offline.java | 6 +-
.../org/apache/dubbo/qos/command/impl/Online.java | 6 +-
.../org/apache/dubbo/qos/command/impl/LsTest.java | 10 +-
.../apache/dubbo/qos/command/impl/OfflineTest.java | 10 +-
.../apache/dubbo/qos/command/impl/OnlineTest.java | 8 +-
.../registry/integration/RegistryDirectory.java | 5 +
.../registry/integration/RegistryProtocol.java | 11 +-
.../registry/support/ConsumerInvokerWrapper.java | 88 ----------------
.../registry/support/ProviderConsumerRegTable.java | 112 ---------------------
.../apache/dubbo/rpc/model/ApplicationModel.java | 37 +++++++
.../org/apache/dubbo/rpc/model/ConsumerModel.java | 11 ++
.../org/apache/dubbo/rpc/model/ProviderModel.java | 18 ++++
.../rpc/model/invoker}/ProviderInvokerWrapper.java | 4 +-
dubbo-rpc/dubbo-rpc-dubbo/pom.xml | 5 -
.../protocol/dubbo/telnet/ListTelnetHandler.java | 8 +-
19 files changed, 111 insertions(+), 248 deletions(-)
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Directory.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Directory.java
index 67f0216..a03a781 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Directory.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Directory.java
@@ -46,4 +46,6 @@ public interface Directory<T> extends Node {
*/
List<Invoker<T>> list(Invocation invocation) throws RpcException;
+ List<Invoker<T>> getAllInvokers();
+
}
\ No newline at end of file
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java
index c5a26a3..0595c63 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/StaticDirectory.java
@@ -62,6 +62,11 @@ public class StaticDirectory<T> extends AbstractDirectory<T> {
}
@Override
+ public List<Invoker<T>> getAllInvokers() {
+ return invokers;
+ }
+
+ @Override
public boolean isAvailable() {
if (isDestroyed()) {
return false;
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java
index db2d401..61ef955 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java
@@ -94,6 +94,10 @@ public abstract class AbstractClusterInvoker<T> implements Invoker<T> {
return directory.isAvailable();
}
+ public Directory<T> getDirectory() {
+ return directory;
+ }
+
@Override
public void destroy() {
if (destroyed.compareAndSet(false, true)) {
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Ls.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Ls.java
index ca23068..cf0dc68 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Ls.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Ls.java
@@ -20,15 +20,13 @@ import org.apache.dubbo.qos.command.BaseCommand;
import org.apache.dubbo.qos.command.CommandContext;
import org.apache.dubbo.qos.command.annotation.Cmd;
import org.apache.dubbo.qos.textui.TTable;
+import org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ConsumerModel;
import org.apache.dubbo.rpc.model.ProviderModel;
import java.util.Collection;
-import static org.apache.dubbo.registry.support.ProviderConsumerRegTable.getConsumerAddressNum;
-import static org.apache.dubbo.registry.support.ProviderConsumerRegTable.isRegistered;
-
@Cmd(name = "ls", summary = "ls service", example = {
"ls"
})
@@ -57,7 +55,7 @@ public class Ls implements BaseCommand {
//Content
for (ProviderModel providerModel : providerModelList) {
- tTable.addRow(providerModel.getServiceKey(), isRegistered(providerModel.getServiceKey()) ? "Y" : "N");
+ tTable.addRow(providerModel.getServiceKey(), ApplicationModel.isRegistered(providerModel.getServiceKey()) ? "Y" : "N");
}
stringBuilder.append(tTable.rendering());
@@ -80,7 +78,8 @@ public class Ls implements BaseCommand {
//Content
//TODO to calculate consumerAddressNum
for (ConsumerModel consumerModel : consumerModelList) {
- tTable.addRow(consumerModel.getServiceKey(), getConsumerAddressNum(consumerModel.getServiceKey()));
+ AbstractClusterInvoker clusterInvoker = (AbstractClusterInvoker) consumerModel.getInvoker();
+ tTable.addRow(consumerModel.getServiceKey(), clusterInvoker.getDirectory().getAllInvokers().size());
}
stringBuilder.append(tTable.rendering());
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
index cf2862e..fcbf548 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
@@ -24,13 +24,11 @@ import org.apache.dubbo.qos.command.CommandContext;
import org.apache.dubbo.qos.command.annotation.Cmd;
import org.apache.dubbo.registry.Registry;
import org.apache.dubbo.registry.RegistryFactory;
-import org.apache.dubbo.registry.support.ProviderConsumerRegTable;
-import org.apache.dubbo.registry.support.ProviderInvokerWrapper;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ProviderModel;
+import org.apache.dubbo.rpc.model.invoker.ProviderInvokerWrapper;
import java.util.Collection;
-import java.util.Set;
@Cmd(name = "offline", summary = "offline dubbo", example = {
"offline dubbo",
@@ -53,7 +51,7 @@ public class Offline implements BaseCommand {
for (ProviderModel providerModel : providerModelList) {
if (providerModel.getServiceKey().matches(servicePattern)) {
hasService = true;
- Set<ProviderInvokerWrapper> providerInvokerWrapperSet = ProviderConsumerRegTable.getProviderInvoker(providerModel.getServiceKey());
+ Collection<ProviderInvokerWrapper> providerInvokerWrapperSet = ApplicationModel.getProviderInvokers(providerModel.getServiceKey());
for (ProviderInvokerWrapper providerInvokerWrapper : providerInvokerWrapperSet) {
if (!providerInvokerWrapper.isReg()) {
continue;
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
index 6bcf089..ae3d17f 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
@@ -25,13 +25,11 @@ import org.apache.dubbo.qos.command.CommandContext;
import org.apache.dubbo.qos.command.annotation.Cmd;
import org.apache.dubbo.registry.Registry;
import org.apache.dubbo.registry.RegistryFactory;
-import org.apache.dubbo.registry.support.ProviderConsumerRegTable;
-import org.apache.dubbo.registry.support.ProviderInvokerWrapper;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ProviderModel;
+import org.apache.dubbo.rpc.model.invoker.ProviderInvokerWrapper;
import java.util.Collection;
-import java.util.Set;
@Cmd(name = "online", summary = "online dubbo", example = {
"online dubbo",
@@ -55,7 +53,7 @@ public class Online implements BaseCommand {
for (ProviderModel providerModel : providerModelList) {
if (providerModel.getServiceKey().matches(servicePattern)) {
hasService = true;
- Set<ProviderInvokerWrapper> providerInvokerWrapperSet = ProviderConsumerRegTable.getProviderInvoker(providerModel.getServiceKey());
+ Collection<ProviderInvokerWrapper> providerInvokerWrapperSet = ApplicationModel.getProviderInvokers(providerModel.getServiceKey());
for (ProviderInvokerWrapper providerInvokerWrapper : providerInvokerWrapperSet) {
if (providerInvokerWrapper.isReg()) {
continue;
diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
index 4b4fda2..bef3088 100644
--- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
+++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/LsTest.java
@@ -19,19 +19,17 @@ package org.apache.dubbo.qos.command.impl;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.qos.command.CommandContext;
import org.apache.dubbo.registry.integration.RegistryDirectory;
-import org.apache.dubbo.registry.support.ProviderConsumerRegTable;
-import org.apache.dubbo.registry.support.ProviderInvokerWrapper;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ConsumerModel;
import org.apache.dubbo.rpc.model.ProviderModel;
+import org.apache.dubbo.rpc.model.invoker.ProviderInvokerWrapper;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.Map;
-import static org.apache.dubbo.registry.support.ProviderConsumerRegTable.getProviderInvoker;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.mockito.Mockito.mock;
@@ -54,8 +52,8 @@ public class LsTest {
when(providerUrl.getServiceKey()).thenReturn("org.apache.dubbo.BarService");
when(providerUrl.toFullString()).thenReturn("dubbo://localhost:8888/org.apache.dubbo.BarService");
when(providerInvoker.getUrl()).thenReturn(providerUrl);
- ProviderConsumerRegTable.registerProvider(providerInvoker, registryUrl, providerUrl);
- for (ProviderInvokerWrapper wrapper : getProviderInvoker("org.apache.dubbo.BarService")) {
+ ApplicationModel.registerProviderInvoker(providerInvoker, registryUrl, providerUrl);
+ for (ProviderInvokerWrapper wrapper : ApplicationModel.getProviderInvokers("org.apache.dubbo.BarService")) {
wrapper.setReg(true);
}
@@ -68,7 +66,7 @@ public class LsTest {
Map invokers = Mockito.mock(Map.class);
when(invokers.size()).thenReturn(100);
when(directory.getUrlInvokerMap()).thenReturn(invokers);
- ProviderConsumerRegTable.registerConsumer(consumerInvoker, registryUrl, consumerUrl, directory);
+ ApplicationModel.registerConsumerInvoker(consumerInvoker, consumerUrl.getServiceKey());
Ls ls = new Ls();
String output = ls.execute(mock(CommandContext.class), null);
diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
index 6f6be8e..8d27d12 100644
--- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
+++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OfflineTest.java
@@ -19,16 +19,14 @@ package org.apache.dubbo.qos.command.impl;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.qos.command.CommandContext;
import org.apache.dubbo.registry.Registry;
-import org.apache.dubbo.registry.support.ProviderConsumerRegTable;
-import org.apache.dubbo.registry.support.ProviderInvokerWrapper;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ProviderModel;
+import org.apache.dubbo.rpc.model.invoker.ProviderInvokerWrapper;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
-import static org.apache.dubbo.registry.support.ProviderConsumerRegTable.getProviderInvoker;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.core.Is.is;
@@ -49,8 +47,8 @@ public class OfflineTest {
when(providerUrl.getServiceKey()).thenReturn("org.apache.dubbo.BarService");
when(providerUrl.toFullString()).thenReturn("dubbo://localhost:8888/org.apache.dubbo.BarService");
when(providerInvoker.getUrl()).thenReturn(providerUrl);
- ProviderConsumerRegTable.registerProvider(providerInvoker, registryUrl, providerUrl);
- for (ProviderInvokerWrapper wrapper : getProviderInvoker("org.apache.dubbo.BarService")) {
+ ApplicationModel.registerProviderInvoker(providerInvoker, registryUrl, providerUrl);
+ for (ProviderInvokerWrapper wrapper : ApplicationModel.getProviderInvokers("org.apache.dubbo.BarService")) {
wrapper.setReg(true);
}
@@ -61,7 +59,7 @@ public class OfflineTest {
String output = offline.execute(mock(CommandContext.class), new String[]{"org.apache.dubbo.BarService"});
assertThat(output, containsString("OK"));
Mockito.verify(registry).unregister(providerUrl);
- for (ProviderInvokerWrapper wrapper : getProviderInvoker("org.apache.dubbo.BarService")) {
+ for (ProviderInvokerWrapper wrapper : ApplicationModel.getProviderInvokers("org.apache.dubbo.BarService")) {
assertThat(wrapper.isReg(), is(false));
}
diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
index b419f0c..7474b68 100644
--- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
+++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/command/impl/OnlineTest.java
@@ -19,15 +19,13 @@ package org.apache.dubbo.qos.command.impl;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.qos.command.CommandContext;
import org.apache.dubbo.registry.Registry;
-import org.apache.dubbo.registry.support.ProviderConsumerRegTable;
-import org.apache.dubbo.registry.support.ProviderInvokerWrapper;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ProviderModel;
+import org.apache.dubbo.rpc.model.invoker.ProviderInvokerWrapper;
import org.junit.jupiter.api.Test;
-import static org.apache.dubbo.registry.support.ProviderConsumerRegTable.getProviderInvoker;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -48,7 +46,7 @@ public class OnlineTest {
when(providerUrl.getServiceKey()).thenReturn("org.apache.dubbo.BarService");
when(providerUrl.toFullString()).thenReturn("dubbo://localhost:8888/org.apache.dubbo.BarService");
when(providerInvoker.getUrl()).thenReturn(providerUrl);
- ProviderConsumerRegTable.registerProvider(providerInvoker, registryUrl, providerUrl);
+ ApplicationModel.registerProviderInvoker(providerInvoker, registryUrl, providerUrl);
Registry registry = mock(Registry.class);
TestRegistryFactory.registry = registry;
@@ -56,7 +54,7 @@ public class OnlineTest {
Online online = new Online();
String output = online.execute(mock(CommandContext.class), new String[]{"org.apache.dubbo.BarService"});
assertThat(output, equalTo("OK"));
- for (ProviderInvokerWrapper wrapper : getProviderInvoker("org.apache.dubbo.BarService")) {
+ for (ProviderInvokerWrapper wrapper : ApplicationModel.getProviderInvokers("org.apache.dubbo.BarService")) {
assertTrue(wrapper.isReg());
}
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
index 2f3a835..5686917 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
@@ -605,6 +605,11 @@ public class RegistryDirectory<T> extends AbstractDirectory<T> implements Notify
}
@Override
+ public List<Invoker<T>> getAllInvokers() {
+ return invokers;
+ }
+
+ @Override
public URL getUrl() {
return this.overrideDirectoryUrl;
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 9afa7ab..0f07aad 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@ -31,8 +31,6 @@ import org.apache.dubbo.registry.NotifyListener;
import org.apache.dubbo.registry.Registry;
import org.apache.dubbo.registry.RegistryFactory;
import org.apache.dubbo.registry.RegistryService;
-import org.apache.dubbo.registry.support.ProviderConsumerRegTable;
-import org.apache.dubbo.registry.support.ProviderInvokerWrapper;
import org.apache.dubbo.rpc.Exporter;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Protocol;
@@ -41,6 +39,7 @@ import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.cluster.Cluster;
import org.apache.dubbo.rpc.cluster.Configurator;
import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.invoker.ProviderInvokerWrapper;
import org.apache.dubbo.rpc.protocol.InvokerWrapper;
import java.util.ArrayList;
@@ -211,7 +210,7 @@ public class RegistryProtocol implements Protocol {
// url to registry
final Registry registry = getRegistry(originInvoker);
final URL registeredProviderUrl = getRegisteredProviderUrl(providerUrl, registryUrl);
- ProviderInvokerWrapper<T> providerInvokerWrapper = ProviderConsumerRegTable.registerProvider(originInvoker,
+ ProviderInvokerWrapper<T> providerInvokerWrapper = ApplicationModel.registerProviderInvoker(originInvoker,
registryUrl, registeredProviderUrl);
//to judge if we need to delay publish
boolean register = registeredProviderUrl.getParameter("register", true);
@@ -254,8 +253,8 @@ public class RegistryProtocol implements Protocol {
final URL registeredProviderUrl = getRegisteredProviderUrl(newInvokerUrl, registryUrl);
//decide if we need to re-publish
- ProviderInvokerWrapper<T> providerInvokerWrapper = ProviderConsumerRegTable.getProviderWrapper(registeredProviderUrl, originInvoker);
- ProviderInvokerWrapper<T> newProviderInvokerWrapper = ProviderConsumerRegTable.registerProvider(originInvoker, registryUrl, registeredProviderUrl);
+ ProviderInvokerWrapper<T> providerInvokerWrapper = ApplicationModel.getProviderInvoker(registeredProviderUrl.getServiceKey(), originInvoker);
+ ProviderInvokerWrapper<T> newProviderInvokerWrapper = ApplicationModel.registerProviderInvoker(originInvoker, registryUrl, registeredProviderUrl);
/**
* Only if the new url going to Registry is different with the previous one should we do unregister and register.
*/
@@ -412,7 +411,7 @@ public class RegistryProtocol implements Protocol {
PROVIDERS_CATEGORY + "," + CONFIGURATORS_CATEGORY + "," + ROUTERS_CATEGORY));
Invoker invoker = cluster.join(directory);
- ProviderConsumerRegTable.registerConsumer(invoker, url, subscribeUrl, directory);
+ ApplicationModel.registerConsumerInvoker(invoker, subscribeUrl.getServiceKey());
return invoker;
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ConsumerInvokerWrapper.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ConsumerInvokerWrapper.java
deleted file mode 100644
index 141634d..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ConsumerInvokerWrapper.java
+++ /dev/null
@@ -1,88 +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.registry.support;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.registry.integration.RegistryDirectory;
-import org.apache.dubbo.rpc.Invocation;
-import org.apache.dubbo.rpc.Invoker;
-import org.apache.dubbo.rpc.Result;
-import org.apache.dubbo.rpc.RpcException;
-
-/**
- * @date 2017/11/23
- */
-public class ConsumerInvokerWrapper<T> implements Invoker {
- private Invoker<T> invoker;
- private URL originUrl;
- private URL registryUrl;
- private URL consumerUrl;
- private RegistryDirectory registryDirectory;
-
- public ConsumerInvokerWrapper(Invoker<T> invoker, URL registryUrl, URL consumerUrl, RegistryDirectory registryDirectory) {
- this.invoker = invoker;
- this.originUrl = URL.valueOf(invoker.getUrl().toFullString());
- this.registryUrl = URL.valueOf(registryUrl.toFullString());
- this.consumerUrl = consumerUrl;
- this.registryDirectory = registryDirectory;
- }
-
- @Override
- public Class<T> getInterface() {
- return invoker.getInterface();
- }
-
- @Override
- public URL getUrl() {
- return invoker.getUrl();
- }
-
- @Override
- public boolean isAvailable() {
- return invoker.isAvailable();
- }
-
- @Override
- public Result invoke(Invocation invocation) throws RpcException {
- return invoker.invoke(invocation);
- }
-
- @Override
- public void destroy() {
- invoker.destroy();
- }
-
- public URL getOriginUrl() {
- return originUrl;
- }
-
- public URL getRegistryUrl() {
- return registryUrl;
- }
-
- public Invoker<T> getInvoker() {
- return invoker;
- }
-
- public URL getConsumerUrl() {
- return consumerUrl;
- }
-
- public RegistryDirectory getRegistryDirectory() {
- return registryDirectory;
- }
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderConsumerRegTable.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderConsumerRegTable.java
deleted file mode 100644
index 9af3988..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderConsumerRegTable.java
+++ /dev/null
@@ -1,112 +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.registry.support;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.utils.ConcurrentHashSet;
-import org.apache.dubbo.registry.integration.RegistryDirectory;
-import org.apache.dubbo.rpc.Invoker;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.Objects;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * @date 2017/11/23
- */
-public class ProviderConsumerRegTable {
- public static ConcurrentHashMap<String, ConcurrentMap<Invoker, ProviderInvokerWrapper>> providerInvokers = new ConcurrentHashMap<>();
- public static ConcurrentHashMap<String, Set<ConsumerInvokerWrapper>> consumerInvokers = new ConcurrentHashMap<>();
-
- public static <T> ProviderInvokerWrapper<T> registerProvider(Invoker<T> invoker, URL registryUrl, URL providerUrl) {
- ProviderInvokerWrapper<T> wrapperInvoker = new ProviderInvokerWrapper<>(invoker, registryUrl, providerUrl);
- String serviceUniqueName = providerUrl.getServiceKey();
- ConcurrentMap<Invoker, ProviderInvokerWrapper> invokers = providerInvokers.get(serviceUniqueName);
- if (invokers == null) {
- providerInvokers.putIfAbsent(serviceUniqueName, new ConcurrentHashMap<>());
- invokers = providerInvokers.get(serviceUniqueName);
- }
- invokers.put(invoker, wrapperInvoker);
- return wrapperInvoker;
- }
-
- /*public static ProviderInvokerWrapper removeProviderWrapper(Invoker invoker, URL providerUrl) {
- String serviceUniqueName = providerUrl.getServiceKey();
- Set<ProviderInvokerWrapper> invokers = providerInvokers.get(serviceUniqueName);
- if (invokers == null) {
- return null;
- }
- return invokers.remove(new ProviderIndvokerWrapper(invoker, null, null));
- }*/
-
- public static Set<ProviderInvokerWrapper> getProviderInvoker(String serviceUniqueName) {
- ConcurrentMap<Invoker, ProviderInvokerWrapper> invokers = providerInvokers.get(serviceUniqueName);
- if (invokers == null) {
- return Collections.emptySet();
- }
- return new HashSet<>(invokers.values());
- }
-
- public static <T> ProviderInvokerWrapper<T> getProviderWrapper(URL registeredProviderUrl, Invoker<T> invoker) {
- String serviceUniqueName = registeredProviderUrl.getServiceKey();
- ConcurrentMap<Invoker, ProviderInvokerWrapper> invokers = providerInvokers.get(serviceUniqueName);
- if (invokers == null) {
- return null;
- }
-
- for (Map.Entry<Invoker, ProviderInvokerWrapper> entry : invokers.entrySet()) {
- if (entry.getKey() == invoker) {
- return entry.getValue();
- }
- }
-
- return null;
- }
-
- public static void registerConsumer(Invoker invoker, URL registryUrl, URL consumerUrl, RegistryDirectory registryDirectory) {
- ConsumerInvokerWrapper wrapperInvoker = new ConsumerInvokerWrapper(invoker, registryUrl, consumerUrl, registryDirectory);
- String serviceUniqueName = consumerUrl.getServiceKey();
- Set<ConsumerInvokerWrapper> invokers = consumerInvokers.get(serviceUniqueName);
- if (invokers == null) {
- consumerInvokers.putIfAbsent(serviceUniqueName, new ConcurrentHashSet<ConsumerInvokerWrapper>());
- invokers = consumerInvokers.get(serviceUniqueName);
- }
- invokers.add(wrapperInvoker);
- }
-
- public static Set<ConsumerInvokerWrapper> getConsumerInvoker(String serviceUniqueName) {
- Set<ConsumerInvokerWrapper> invokers = consumerInvokers.get(serviceUniqueName);
- return invokers == null ? Collections.emptySet() : invokers;
- }
-
- public static boolean isRegistered(String serviceUniqueName) {
- Set<ProviderInvokerWrapper> providerInvokerWrapperSet = ProviderConsumerRegTable.getProviderInvoker(serviceUniqueName);
- return providerInvokerWrapperSet.stream().anyMatch(ProviderInvokerWrapper::isReg);
- }
-
- public static int getConsumerAddressNum(String serviceUniqueName) {
- Set<ConsumerInvokerWrapper> providerInvokerWrapperSet = ProviderConsumerRegTable.getConsumerInvoker(serviceUniqueName);
- return providerInvokerWrapperSet.stream()
- .map(w -> w.getRegistryDirectory().getUrlInvokerMap())
- .filter(Objects::nonNull)
- .mapToInt(Map::size).sum();
- }
-}
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index 7a7a4be..953d3c3 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@ -16,10 +16,14 @@
*/
package org.apache.dubbo.rpc.model;
+import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.rpc.Invoker;
+import org.apache.dubbo.rpc.model.invoker.ProviderInvokerWrapper;
import java.util.Collection;
+import java.util.Collections;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -122,6 +126,39 @@ public class ApplicationModel {
ApplicationModel.application = application;
}
+ public static <T> ProviderInvokerWrapper<T> registerProviderInvoker(Invoker<T> invoker, URL registryUrl, URL providerUrl) {
+ ProviderInvokerWrapper<T> wrapperInvoker = new ProviderInvokerWrapper<>(invoker, registryUrl, providerUrl);
+ ProviderModel providerModel = getProviderModel(providerUrl.getServiceKey());
+ providerModel.addInvoker(wrapperInvoker);
+ return wrapperInvoker;
+ }
+
+ public static Collection<ProviderInvokerWrapper> getProviderInvokers(String serviceKey) {
+ ProviderModel providerModel = getProviderModel(serviceKey);
+ if (providerModel == null) {
+ return Collections.emptySet();
+ }
+ return providerModel.getInvokers();
+ }
+
+ public static <T> ProviderInvokerWrapper<T> getProviderInvoker(String serviceKey, Invoker<T> invoker) {
+ ProviderModel providerModel = getProviderModel(serviceKey);
+ return providerModel.getInvoker(invoker.getUrl().getProtocol());
+ }
+
+ public static boolean isRegistered(String serviceKey) {
+ return getProviderInvokers(serviceKey).stream().anyMatch(ProviderInvokerWrapper::isReg);
+ }
+
+ public static void registerConsumerInvoker(Invoker invoker, String serviceKey) {
+ ConsumerModel consumerModel = getConsumerModel(serviceKey);
+ consumerModel.setInvoker(invoker);
+ }
+
+ public static <T> Invoker<T> getConsumerInvoker(String serviceKey) {
+ return (Invoker<T>) getConsumerModel(serviceKey).getInvoker();
+ }
+
/**
* For unit test
*/
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java
index 135cadb..f7c8705 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ConsumerModel.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.rpc.model;
import org.apache.dubbo.common.utils.Assert;
import org.apache.dubbo.common.utils.CollectionUtils;
+import org.apache.dubbo.rpc.Invoker;
import java.lang.reflect.Method;
import java.util.HashMap;
@@ -33,6 +34,8 @@ public class ConsumerModel {
private final ServiceModel serviceModel;
private final Map<String, AsyncMethodInfo> methodConfigs = new HashMap<>();
+ private Invoker<?> invoker;
+
/**
* This constructor create an instance of ConsumerModel and passed objects should not be null.
* If service name, service instance, proxy object,methods should not be null. If these are null
@@ -96,6 +99,14 @@ public class ConsumerModel {
return serviceModel;
}
+ public Invoker<?> getInvoker() {
+ return invoker;
+ }
+
+ public void setInvoker(Invoker<?> invoker) {
+ this.invoker = invoker;
+ }
+
public static class AsyncMethodInfo {
// callback instance when async-call is invoked
private Object oninvokeInstance;
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
index 41f6f7c..54e6625 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
@@ -16,6 +16,11 @@
*/
package org.apache.dubbo.rpc.model;
+import org.apache.dubbo.rpc.model.invoker.ProviderInvokerWrapper;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
import java.util.Set;
/**
@@ -25,6 +30,7 @@ public class ProviderModel {
private final String serviceKey;
private final Object serviceInstance;
private final ServiceModel serviceModel;
+ private Map<String, ProviderInvokerWrapper> protocolInvokers;
public ProviderModel(String serviceKey, Object serviceInstance, ServiceModel serviceModel) {
if (null == serviceInstance) {
@@ -55,4 +61,16 @@ public class ProviderModel {
public ServiceModel getServiceModel() {
return serviceModel;
}
+
+ public void addInvoker(ProviderInvokerWrapper invoker) {
+ protocolInvokers.put(invoker.getUrl().getProtocol(), invoker);
+ }
+
+ public ProviderInvokerWrapper getInvoker(String protocol) {
+ return protocolInvokers.get(protocol);
+ }
+
+ public Collection<ProviderInvokerWrapper> getInvokers() {
+ return Collections.unmodifiableCollection(protocolInvokers.values());
+ }
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderInvokerWrapper.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/invoker/ProviderInvokerWrapper.java
similarity index 95%
rename from dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderInvokerWrapper.java
rename to dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/invoker/ProviderInvokerWrapper.java
index ce079b7..cc19589 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderInvokerWrapper.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/invoker/ProviderInvokerWrapper.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.registry.support;
+package org.apache.dubbo.rpc.model.invoker;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.rpc.Invocation;
@@ -32,7 +32,7 @@ public class ProviderInvokerWrapper<T> implements Invoker {
private URL providerUrl;
private volatile boolean isReg;
- public ProviderInvokerWrapper(Invoker<T> invoker,URL registryUrl,URL providerUrl) {
+ public ProviderInvokerWrapper(Invoker<T> invoker, URL registryUrl, URL providerUrl) {
this.invoker = invoker;
this.originUrl = URL.valueOf(invoker.getUrl().toFullString());
this.registryUrl = URL.valueOf(registryUrl.toFullString());
diff --git a/dubbo-rpc/dubbo-rpc-dubbo/pom.xml b/dubbo-rpc/dubbo-rpc-dubbo/pom.xml
index dc6cd22..9f45f81 100644
--- a/dubbo-rpc/dubbo-rpc-dubbo/pom.xml
+++ b/dubbo-rpc/dubbo-rpc-dubbo/pom.xml
@@ -41,11 +41,6 @@
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-config-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-container-api</artifactId>
<version>${project.parent.version}</version>
<exclusions>
diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/ListTelnetHandler.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/ListTelnetHandler.java
index f0953ea..b3e176c 100644
--- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/ListTelnetHandler.java
+++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/ListTelnetHandler.java
@@ -22,6 +22,7 @@ import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.remoting.Channel;
import org.apache.dubbo.remoting.telnet.TelnetHandler;
import org.apache.dubbo.remoting.telnet.support.Help;
+import org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ConsumerModel;
import org.apache.dubbo.rpc.model.MethodModel;
@@ -29,9 +30,6 @@ import org.apache.dubbo.rpc.model.ProviderModel;
import java.lang.reflect.Method;
-import static org.apache.dubbo.registry.support.ProviderConsumerRegTable.getConsumerAddressNum;
-import static org.apache.dubbo.registry.support.ProviderConsumerRegTable.isRegistered;
-
/**
* ListTelnetHandler handler list services and its methods details.
*/
@@ -90,7 +88,7 @@ public class ListTelnetHandler implements TelnetHandler {
if (detail) {
buf.append(" -> ");
buf.append(" published: ");
- buf.append(isRegistered(provider.getServiceKey()) ? "Y" : "N");
+ buf.append(ApplicationModel.isRegistered(provider.getServiceKey()) ? "Y" : "N");
}
buf.append("\r\n");
}
@@ -106,7 +104,7 @@ public class ListTelnetHandler implements TelnetHandler {
if (detail) {
buf.append(" -> ");
buf.append(" addresses: ");
- buf.append(getConsumerAddressNum(consumer.getServiceKey()));
+ buf.append(((AbstractClusterInvoker) consumer.getInvoker()).getDirectory().getAllInvokers().size());
}
}
}