Fix local invoke consumer url override (#12553)
This commit is contained in:
parent
3160602072
commit
a4e9c9efa4
|
|
@ -20,6 +20,7 @@ package org.apache.dubbo.rpc.cluster.support.wrapper;
|
||||||
import org.apache.dubbo.common.URL;
|
import org.apache.dubbo.common.URL;
|
||||||
import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
|
import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
|
||||||
import org.apache.dubbo.common.logger.LoggerFactory;
|
import org.apache.dubbo.common.logger.LoggerFactory;
|
||||||
|
import org.apache.dubbo.common.url.component.DubboServiceAddressURL;
|
||||||
import org.apache.dubbo.common.url.component.ServiceConfigURL;
|
import org.apache.dubbo.common.url.component.ServiceConfigURL;
|
||||||
import org.apache.dubbo.common.utils.NetUtils;
|
import org.apache.dubbo.common.utils.NetUtils;
|
||||||
import org.apache.dubbo.rpc.Exporter;
|
import org.apache.dubbo.rpc.Exporter;
|
||||||
|
|
@ -179,7 +180,7 @@ public class ScopeClusterInvoker<T> implements ClusterInvoker<T>, ExporterChange
|
||||||
}
|
}
|
||||||
if (getUrl().getServiceKey().equals(exporter.getInvoker().getUrl().getServiceKey())
|
if (getUrl().getServiceKey().equals(exporter.getInvoker().getUrl().getServiceKey())
|
||||||
&& exporter.getInvoker().getUrl().getProtocol().equalsIgnoreCase(LOCAL_PROTOCOL)) {
|
&& exporter.getInvoker().getUrl().getProtocol().equalsIgnoreCase(LOCAL_PROTOCOL)) {
|
||||||
createInjvmInvoker();
|
createInjvmInvoker(exporter);
|
||||||
isExported.compareAndSet(false, true);
|
isExported.compareAndSet(false, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -275,14 +276,19 @@ public class ScopeClusterInvoker<T> implements ClusterInvoker<T>, ExporterChange
|
||||||
/**
|
/**
|
||||||
* Creates a new Invoker for the current ScopeClusterInvoker and exports it to the local JVM.
|
* Creates a new Invoker for the current ScopeClusterInvoker and exports it to the local JVM.
|
||||||
*/
|
*/
|
||||||
private void createInjvmInvoker() {
|
private void createInjvmInvoker(Exporter<?> exporter) {
|
||||||
if (injvmInvoker == null) {
|
if (injvmInvoker == null) {
|
||||||
synchronized (createLock) {
|
synchronized (createLock) {
|
||||||
if (injvmInvoker == null) {
|
if (injvmInvoker == null) {
|
||||||
URL url = new ServiceConfigURL(LOCAL_PROTOCOL, NetUtils.getLocalHost(), getUrl().getPort(), getInterface().getName(), getUrl().getParameters());
|
URL url = new ServiceConfigURL(LOCAL_PROTOCOL, NetUtils.getLocalHost(), getUrl().getPort(),
|
||||||
|
getInterface().getName(), getUrl().getParameters());
|
||||||
url = url.setScopeModel(getUrl().getScopeModel());
|
url = url.setScopeModel(getUrl().getScopeModel());
|
||||||
url = url.setServiceModel(getUrl().getServiceModel());
|
url = url.setServiceModel(getUrl().getServiceModel());
|
||||||
Invoker<?> invoker = protocolSPI.refer(getInterface(), url);
|
|
||||||
|
DubboServiceAddressURL consumerUrl = new DubboServiceAddressURL(url.getUrlAddress(), url.getUrlParam(),
|
||||||
|
exporter.getInvoker().getUrl(), null);
|
||||||
|
|
||||||
|
Invoker<?> invoker = protocolSPI.refer(getInterface(), consumerUrl);
|
||||||
List<Invoker<?>> invokers = new ArrayList<>();
|
List<Invoker<?>> invokers = new ArrayList<>();
|
||||||
invokers.add(invoker);
|
invokers.add(invoker);
|
||||||
injvmInvoker = Cluster.getCluster(url.getScopeModel(), Cluster.DEFAULT, false).join(new StaticDirectory(url, invokers), true);
|
injvmInvoker = Cluster.getCluster(url.getScopeModel(), Cluster.DEFAULT, false).join(new StaticDirectory(url, invokers), true);
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,7 @@ public class InjvmInvoker<T> extends AbstractInvoker<T> {
|
||||||
if (pts != null && args != null && pts.length == args.length) {
|
if (pts != null && args != null && pts.length == args.length) {
|
||||||
realArgument = new Object[pts.length];
|
realArgument = new Object[pts.length];
|
||||||
for (int i = 0; i < pts.length; i++) {
|
for (int i = 0; i < pts.length; i++) {
|
||||||
realArgument[i] = paramDeepCopyUtil.copy(invoker.getUrl(), args[i], pts[i]);
|
realArgument[i] = paramDeepCopyUtil.copy(getUrl(), args[i], pts[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (realArgument == null) {
|
if (realArgument == null) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue