java 方法 链路 trace_SkyWalking 源码解析 —— @Trace 注解想要追踪的任何方法

摘要: 原创出处 http://www.iocoder.cn/SkyWalking/@trace-for-any-methods/ 「芋道源码」欢迎转载,保留摘要,谢谢!

本文主要基于 SkyWalking 3.2.6 正式版

1. 概述

本文主要分享 @Trace 注解想要追踪的任何方法。

我们首先看看 @Trace 的使用例子,再看看 @Trace 的实现代码。涉及代码如下:

java 方法 链路 trace_SkyWalking 源码解析 —— @Trace 注解想要追踪的任何方法_第1张图片

java 方法 链路 trace_SkyWalking 源码解析 —— @Trace 注解想要追踪的任何方法_第2张图片

2. 使用例子

1、使用 Maven 引入相应的工具包

org.skywalking

apm-toolkit-trace

${skywalking.version}

2、在任何想要追踪的方法上添加 @Trace 注解,以 SpringMVC 为例子:

@Trace

@GetMapping("/log")

public String log() {

ActiveSpan.tag("mp", "芋道源码");

System.out.println("traceId:" + TraceContext.traceId());

return "log";

}

@Trace 注解的方法,会创建一个 LocalSpan 。

3、执行后,我们看来看看 SkyWalking WEBUI 的展示。

java 方法 链路 trace_SkyWalking 源码解析 —— @Trace 注解想要追踪的任何方法_第3张图片

3. 实现代码

3.1 TraceAnnotationActivation

java 方法 链路 trace_SkyWalking 源码解析 —— @Trace 注解想要追踪的任何方法_第4张图片

org.skywalking.apm.toolkit.activation.trace.TraceAnnotationMethodInterceptor ,实现 InstanceMethodsAroundInterceptor 接口,TraceAnnotationActivation 的拦截器。代码如下:

#beforeMethod(...) 方法,创建 LocalSpan 对象。代码如下:

第 49 行:调用 ContextManager#createLocalSpan(operationName) 方法,创建 LocalSpan 对象。

#afterMethod(...) 方法,调用 ContextManager#stopSpan() 方法,完成 LocalSpan 对象。

3.2 ActiveSpanTagActivation

java 方法 链路 trace_SkyWalking 源码解析 —— @Trace 注解想要追踪的任何方法_第5张图片

#beforeMethod(...) 方法,添加 Span 的标签键值对。注意,可以不依赖 @Trace 注解。

3.3 TraceContextActivation

java 方法 链路 trace_SkyWalking 源码解析 —— @Trace 注解想要追踪的任何方法_第6张图片

#afterMethod(...) 方法,调用 ContextManager#getGlobalTraceId() 方法,使用全局链路追踪编号,而不是原有结果。

你可能感兴趣的:(java,方法,链路,trace)