From 8b2d755aa8a2a38742650392ff220b8fdadde328 Mon Sep 17 00:00:00 2001 From: "chao.jiang02" Date: Tue, 28 May 2024 23:03:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E3=80=90dubbo3.0=E5=AD=90?= =?UTF-8?q?=E8=B0=83=E7=94=A8mock=E7=BB=93=E6=9E=9C=E4=B8=BAnull=EF=BC=8C?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E5=88=B0=E5=BD=95=E5=88=B6=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E3=80=91=E7=9A=84=E9=97=AE=E9=A2=98=20https://github.com/arext?= =?UTF-8?q?est/arex-agent-java/issues/490?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../arex/inst/dubbo/alibaba/DubboAdapter.java | 12 ++++++--- .../inst/dubbo/apache/v2/DubboAdapter.java | 6 ++++- .../inst/dubbo/apache/v3/DubboAdapter.java | 1 + .../inst/dubbo/common/AbstractAdapter.java | 26 ++++++++++++++++++- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/arex-instrumentation/dubbo/arex-dubbo-alibaba/src/main/java/io/arex/inst/dubbo/alibaba/DubboAdapter.java b/arex-instrumentation/dubbo/arex-dubbo-alibaba/src/main/java/io/arex/inst/dubbo/alibaba/DubboAdapter.java index bfc5eb270..097d2107d 100644 --- a/arex-instrumentation/dubbo/arex-dubbo-alibaba/src/main/java/io/arex/inst/dubbo/alibaba/DubboAdapter.java +++ b/arex-instrumentation/dubbo/arex-dubbo-alibaba/src/main/java/io/arex/inst/dubbo/alibaba/DubboAdapter.java @@ -1,22 +1,22 @@ package io.arex.inst.dubbo.alibaba; +import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.remoting.exchange.ResponseCallback; import com.alibaba.dubbo.remoting.exchange.ResponseFuture; import com.alibaba.dubbo.rpc.*; import com.alibaba.dubbo.rpc.protocol.dubbo.FutureAdapter; +import com.alibaba.dubbo.rpc.support.ProtocolUtils; import com.alibaba.dubbo.rpc.support.RpcUtils; import io.arex.agent.bootstrap.ctx.TraceTransmitter; import io.arex.agent.bootstrap.model.Mocker; import io.arex.agent.bootstrap.util.ReflectUtil; import io.arex.inst.dubbo.common.AbstractAdapter; import io.arex.inst.runtime.log.LogManager; -import com.alibaba.dubbo.common.URL; -import com.alibaba.dubbo.rpc.support.ProtocolUtils; -import java.util.Collections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Method; +import java.util.Collections; import java.util.Map; import java.util.concurrent.Future; @@ -38,7 +38,11 @@ public static DubboAdapter of(Invoker invoker, Invocation invocation) { @Override public String getServiceName() { - return getUrl().getServiceInterface(); + /* + format:group/interface:version + method:org.apache.dubbo.common.BaseServiceMetadata#buildServiceKey() | org.apache.dubbo.common.URL#buildKey() + */ + return getUrl().getServiceKey(); } /** diff --git a/arex-instrumentation/dubbo/arex-dubbo-apache-v2/src/main/java/io/arex/inst/dubbo/apache/v2/DubboAdapter.java b/arex-instrumentation/dubbo/arex-dubbo-apache-v2/src/main/java/io/arex/inst/dubbo/apache/v2/DubboAdapter.java index fdae12e0a..533268d8a 100644 --- a/arex-instrumentation/dubbo/arex-dubbo-apache-v2/src/main/java/io/arex/inst/dubbo/apache/v2/DubboAdapter.java +++ b/arex-instrumentation/dubbo/arex-dubbo-apache-v2/src/main/java/io/arex/inst/dubbo/apache/v2/DubboAdapter.java @@ -30,7 +30,11 @@ public static DubboAdapter of(Invoker invoker, Invocation invocation) { @Override public String getServiceName() { - return getUrl().getServiceInterface(); + /* + format:group/interface:version + method:org.apache.dubbo.common.BaseServiceMetadata#buildServiceKey() | org.apache.dubbo.common.URL#buildKey() + */ + return getUrl().getServiceKey(); } /** diff --git a/arex-instrumentation/dubbo/arex-dubbo-apache-v3/src/main/java/io/arex/inst/dubbo/apache/v3/DubboAdapter.java b/arex-instrumentation/dubbo/arex-dubbo-apache-v3/src/main/java/io/arex/inst/dubbo/apache/v3/DubboAdapter.java index 973e7aaf2..e28302501 100644 --- a/arex-instrumentation/dubbo/arex-dubbo-apache-v3/src/main/java/io/arex/inst/dubbo/apache/v3/DubboAdapter.java +++ b/arex-instrumentation/dubbo/arex-dubbo-apache-v3/src/main/java/io/arex/inst/dubbo/apache/v3/DubboAdapter.java @@ -34,6 +34,7 @@ public static DubboAdapter of(Invoker invoker, Invocation invocation) { @Override public String getServiceName() { + // format:group/interface:version return invocation.getTargetServiceUniqueName(); } diff --git a/arex-instrumentation/dubbo/arex-dubbo-common/src/main/java/io/arex/inst/dubbo/common/AbstractAdapter.java b/arex-instrumentation/dubbo/arex-dubbo-common/src/main/java/io/arex/inst/dubbo/common/AbstractAdapter.java index ede723c03..6684f8cfb 100644 --- a/arex-instrumentation/dubbo/arex-dubbo-common/src/main/java/io/arex/inst/dubbo/common/AbstractAdapter.java +++ b/arex-instrumentation/dubbo/arex-dubbo-common/src/main/java/io/arex/inst/dubbo/common/AbstractAdapter.java @@ -118,7 +118,31 @@ public Map getRequestHeaders() { } public String getPath() { - return StringUtil.defaultIfEmpty(getAttachment("path"), getServiceName()); + return StringUtil.defaultIfEmpty(this.getServiceNameWithVersion(), this.getServiceName()); + } + + /** + *

Illustrate: Splicing serviceName and version + *

Fix Bug: https://github.com/arextest/arex-agent-java/issues/490 + *

Notice: This method maybe affect ignore [path] config! Especially when a dubbo service exists multiple versions! + */ + protected String getServiceNameWithVersion(){ + String serviceName = this.getAttachment("path"); + if (StringUtil.isBlank(serviceName)){ + return null; + } + String group = this.getValByKey("group"); + String version = this.getAttachment("version"); + // splicing:group/interface:version + StringBuilder serviceKey = new StringBuilder(); + if (!StringUtil.isBlank(group)) { + serviceKey.append(group).append("/"); + } + serviceKey.append(serviceName); + if (!StringUtil.isBlank(version)) { + serviceKey.append(":").append(version); + } + return serviceKey.toString(); } /**