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(); } /**