diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/ApacheMonitorFilterAdvice.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/ApacheMonitorFilterAdvice.java index 4ef2f333ee..fcebf93674 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/ApacheMonitorFilterAdvice.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/advice/ApacheMonitorFilterAdvice.java @@ -106,6 +106,13 @@ public static class AsyncCallback implements BiConsumer { @Override public void accept(@Nullable Result result, @Nullable Throwable t) { AbstractSpan span = (AbstractSpan) RpcContext.getContext().get(DubboTraceHelper.SPAN_KEY); + /* + * because of RpcContextAttachment#getAttachment(String) check value type if not string return null + * @see https://github.com/apache/dubbo/blob/dubbo-3.3.4/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcContextAttachment.java#L78 + */ + if (span == null) { + span = (AbstractSpan) RpcContext.getContext().get().get(DubboTraceHelper.SPAN_KEY); + } if(span == null){ return; }