From 800eaf09ab4a1a1ef7831e8ba6d3715799bd532d Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Fri, 1 Jun 2018 14:42:00 +0800 Subject: [PATCH] Get the real methodname to support consistenthash for generic invoke --- .../rpc/cluster/loadbalance/ConsistentHashLoadBalance.java | 6 ++++-- .../dubbo/rpc/cluster/support/AbstractClusterInvoker.java | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/loadbalance/ConsistentHashLoadBalance.java b/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/loadbalance/ConsistentHashLoadBalance.java index ec86f1d02b0..595cec97a4c 100644 --- a/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/loadbalance/ConsistentHashLoadBalance.java +++ b/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/loadbalance/ConsistentHashLoadBalance.java @@ -20,6 +20,7 @@ import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.rpc.Invocation; import com.alibaba.dubbo.rpc.Invoker; +import com.alibaba.dubbo.rpc.support.RpcUtils; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; @@ -41,11 +42,12 @@ public class ConsistentHashLoadBalance extends AbstractLoadBalance { @SuppressWarnings("unchecked") @Override protected Invoker doSelect(List> invokers, URL url, Invocation invocation) { - String key = invokers.get(0).getUrl().getServiceKey() + "." + invocation.getMethodName(); + String methodName = RpcUtils.getMethodName(invocation); + String key = invokers.get(0).getUrl().getServiceKey() + "." + methodName; int identityHashCode = System.identityHashCode(invokers); ConsistentHashSelector selector = (ConsistentHashSelector) selectors.get(key); if (selector == null || selector.identityHashCode != identityHashCode) { - selectors.put(key, new ConsistentHashSelector(invokers, invocation.getMethodName(), identityHashCode)); + selectors.put(key, new ConsistentHashSelector(invokers, methodName, identityHashCode)); selector = (ConsistentHashSelector) selectors.get(key); } return selector.select(invocation); diff --git a/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvoker.java b/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvoker.java index 0a3e0a51205..9bd3497e143 100644 --- a/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvoker.java +++ b/dubbo-cluster/src/main/java/com/alibaba/dubbo/rpc/cluster/support/AbstractClusterInvoker.java @@ -228,7 +228,7 @@ public Result invoke(final Invocation invocation) throws RpcException { List> invokers = list(invocation); if (invokers != null && !invokers.isEmpty()) { loadbalance = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(invokers.get(0).getUrl() - .getMethodParameter(invocation.getMethodName(), Constants.LOADBALANCE_KEY, Constants.DEFAULT_LOADBALANCE)); + .getMethodParameter(RpcUtils.getMethodName(invocation), Constants.LOADBALANCE_KEY, Constants.DEFAULT_LOADBALANCE)); } RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation); return doInvoke(invocation, invokers, loadbalance);