⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

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

本文主要基于 SkyWalking 3.2.6 正式版


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1. 概述

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

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

2. 使用例子

本节参考官方文档:Application-toolkit-trace-CN.md

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

<dependency>
<groupId>org.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>

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

@Trace
@GetMapping("/log")
public String log() {
ActiveSpan.tag("mp", "芋道源码");
System.out.println("traceId:" + TraceContext.traceId());
return "log";
}

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

3. 实现代码

友情提示:本小节需要胖友阅读过 《SkyWalking 源码分析 —— Agent 插件体系》

3.1 TraceAnnotationActivation

org.skywalking.apm.toolkit.activation.trace.TraceAnnotationActivation ,实现 ClassInstanceMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:


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

3.2 ActiveSpanTagActivation

org.skywalking.apm.toolkit.activation.trace.ActiveSpanTagActivation ,实现 ClassStaticMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:


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

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

3.3 TraceContextActivation

org.skywalking.apm.toolkit.activation.trace.TraceContextActivation ,实现 ClassStaticMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:


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

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

666. 彩蛋

知识星球

简单一文一篇。

胖友,分享个朋友圈可好?

文章目录
  1. 1. 1. 概述
  2. 2. 2. 使用例子
  3. 3. 3. 实现代码
    1. 3.1. 3.1 TraceAnnotationActivation
    2. 3.2. 3.2 ActiveSpanTagActivation
    3. 3.3. 3.3 TraceContextActivation
  4. 4. 666. 彩蛋