skywalking 源码

news2024/9/21 17:52:12

源码核心是SkyWalkingAgent

找到一堆插件,来对符合条件的类来代理
在这里插入图片描述
通过AbstractClassEnhancePluginDefine.define方法来。
如果有很多版本的插件,spring有2.0版本,3.0版本,4.0版。
具体使用哪个版本,看被增加的类使用的是哪个版本的spring
比如

  • spring 2有(A类,B类,C类)
  • spring3 有(B类,C类,D类)
  • spring4有 (B类,C类,D类)

如果应用程序使用的spring2,那么一定会有A类,那skywalking会选择spring2插件匹配,如果应用程序使用的spring4,由于spring3和spring4的类都相同,那么在比较spring3和spring4中的方法。
找出各种独有的方法来匹配,然后在确定使用哪个版本的插件
在这里插入图片描述
以拦截实例方法为例ClassEnhancePluginDefine.enhanceInstance

在这里插入图片描述
拦截到的方法,会交给InstMethodsInter来处理。像aop一样。

在这里插入图片描述

package com.test;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class IndexController {

    
    @RequestMapping("/hello")
    public Object test(){
        return "hello";
    }

}

通过arthas 反编译的代码

       package com.test;

       import com.test.IndexController;
       import java.lang.reflect.Method;
       import java.util.concurrent.Callable;
       import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ConstructorInter;
       import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
       import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter;
       import org.springframework.web.bind.annotation.RequestMapping;
       import org.springframework.web.bind.annotation.RestController;

       @RestController
       public class IndexController
       implements EnhancedInstance {
           private volatile Object _$EnhancedClassField_ws;
           public static volatile /* synthetic */ InstMethodsInter delegate$frmhjm0;
           public static volatile /* synthetic */ InstMethodsInter delegate$iuour40;
           public static volatile /* synthetic */ ConstructorInter delegate$50sob50;
           private static final /* synthetic */ Method cachedValue$L2xuREhn$gvchht3;
           public static volatile /* synthetic */ InstMethodsInter delegate$acsh691;
           public static volatile /* synthetic */ InstMethodsInter delegate$qc4vlq1;
           public static volatile /* synthetic */ ConstructorInter delegate$vm2r3i1;
           private static final /* synthetic */ Method cachedValue$ImSA9xmx$gvchht3;

           public IndexController() {
               this(null);
               delegate$vm2r3i1.intercept(this, new Object[0]);
           }

           private /* synthetic */ IndexController(auxiliary.74kq0FAk kq0FAk) {
           }

           @RequestMapping(value={"/hello"})
           public Object test() {
               return delegate$qc4vlq1.intercept(this, new Object[0], (Callable<?>)new auxiliary.0hTUYoEs(this), cachedValue$ImSA9xmx$gvchht3);
           }

           private /* synthetic */ Object test$original$bo9sTfYx() {
/*15*/         return "hello";
           }

           static {
               ClassLoader.getSystemClassLoader().loadClass("org.apache.skywalking.apm.dependencies.net.bytebuddy.dynamic.Nexus").getMethod("initialize", Class.class, Integer.TYPE).invoke(null, IndexController.class, 1905055592);
               cachedValue$ImSA9xmx$gvchht3 = IndexController.class.getMethod("test", new Class[0]);
           }

           final /* synthetic */ Object test$original$bo9sTfYx$accessor$ImSA9xmx() {
               return this.test$original$bo9sTfYx();
           }
       }

有上面的源码可以看出,对test方法进行了增强,内部其实是调用了delegate$qc4vlq1的intercept方法,就是InstMethodsInter中aop相关逻辑
会执行InstanceMethodsAroundInterceptor接口的3个方法。

以duboo插件为类DubboInterceptor的拦截器实现了InstanceMethodsAroundInterceptor
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue基础--计算商品的总价格

计算商品的总价格&#xff1a; 1、在 父组件中 通过计算属性 动态把总价格计算出来&#xff0c; 2、通过 父向子传值&#xff0c;通过自定义属性&#xff0c;把值传给 子组件 父组件&#xff1a; 1、使用计算属性computed 计算总价格&#xff1a; 1.1、先用filter 过滤出 数…

Unity UGUI5——图集

一、Drawcall ​ 字面理解 DrawCall&#xff0c;就是绘制呼叫的意思&#xff0c;表示 CPU&#xff08;中央处理器&#xff09;通知 GPU&#xff08;图形处理器-显卡&#xff09; &#xff08;一&#xff09;DrawCall 概念 就是 CPU &#xff08;处理器&#xff09;准备好渲染…

基于Web的停车场管理系统(Java)

目录 一、系统介绍 1.开发的环境 2.本系统实现的功能 3.数据库用到的表 4.工程截图 二、系统展示 1、登录页面 2、首页 3、系统信息管理模块 4、车位信息管理模块 5、IC卡信息管理模块 ​编辑6、固定车主停车管理模块 7、临时车主停车管理模块 8、系统功能操作模块 …

unity3d:小地图UV,UGUIshader毒圈挖孔,缩圈

运行效果 场景中缩圈 小地图中挖孔 大地图中挖孔 小地图 方案1使用Mask 给了一个方形的mask组件&#xff0c;然后根据玩家位置计算出地图左下角的位置进行移动。这种实现方式虽然简单&#xff0c;但是会有两个问题&#xff1a; 1.Overdraw特别大&#xff0c;几乎很多时候会有…

【LLMs 入门实战 】Vicuna 模型学习与实战

UC伯克利学者联手CMU、斯坦福等&#xff0c;再次推出一个全新模型70亿/130亿参数的Vicuna&#xff0c;俗称「小羊驼」&#xff0c;小羊驼号称能达到GPT-4的90%性能。 欢迎使用小羊驼&#x1f999;环境搭建权重下载下载 Vicuna Weight下载 LLAMA Weight构建真正的 working weigh…

Lattice Planner从入门到放弃

Lattice Planner相关背景和更正式的公式推导可以直接参考其原始论文《Optimal Trajectory Generation for Dynamic Street Scenarios in a Frent Frame》&#xff08;ICRA 2010&#xff09;&#xff0c;本文侧重于Lattic planner理论和代码的结合。 1. Lattice Planner基本流程…

2023年6月GESP能力等级认证C++一级真题

2023-06 GESP一级真题 题数&#xff1a;27 分数&#xff1a;100 测试时长&#xff1a;60min 一、选择题(每题 2 分&#xff0c;共 30 分) 1.以下不属于计算机输入设备的有 (B ) 。&#xff08;2分&#xff09; A、键盘 B、音箱 C、鼠标 D、传感器 答案解析&#xff1…

如果你正在做AI测试,那么这十点你必须注意

AI是一个已经进入人类日常生活的新技术时代&#xff0c;例如Siri&#xff0c;Alexa语音接口等。通过大数据和数据科学实现数据存储的进步&#xff0c;使用户能够进行快速分析和数据检索。机器学习是一个新领域&#xff0c;机 AI是一个已经进入人类日常生活的新技术时代&#x…

今天我们来说说MySQL的缓存机制

原文链接&#xff1a;http://www.ibearzmblog.com/#/technology/info?id5770c555acd4302f81d86976c06e2319 前言 当我们向数据库服务器发送一条SQL的时候&#xff0c;但数据库收到后就会执行&#xff0c;但是如果在短时间内都执行同一条SQL&#xff0c;如果每次数据库都会执…

CUDA和显卡驱动以及pytorch版本的对应关系

1 支持CUDA 的GPU 支持 CUDA 的 NVIDIA Quadro 和 NVIDIA RTX CUDA GPU | NVIDIA Developer您的 GPU 计算能力 您是否正在寻找 GPU 的计算能力然后查看以下表格。您可以在这里了解更多 计算能力 。 NVIDIA GPU 为全球数百万台台式机笔记本电脑工作站和超级计算机提供动力加速…

《计算机网络——自顶向下方法》精炼——4.4.3-4.4.5

学习是终身的职业。在学习的道路上&#xff0c;谁想停下来就要落伍。 文章目录 UPnP因特网控制报文协议&#xff08;ICMP&#xff09;IPv6IPv6数据报格式IPv4到IPv6的变革 UPnP 通用即插即用&#xff08;UPnP&#xff09;提供了一种让外部网络的主机与NAT内主机交换数据的方式…

六十分之十七———低头拉车后的抬头看路

目录 前言&#xff1a;一、目标二、计划三、完成情况四、提升改进(最少3点)五、意外之喜(最少2点)六、总结 前言&#xff1a; 距离上次的月总已经过去四个多月时间了&#xff0c;这段时间里又是一次阶段性的下沉和突破&#xff0c;于是也就有了现在的总结。 此时还想将自己17…

未来10年,网络安全人才就业的黄金期

随着大数据、物联网、人工智能等新技术的发展&#xff0c;信息技术与经济社会各领域的融合也更加深入。网络攻击行为日趋复杂、黑客攻击行为组织性更强、针对手机无线终端的网络攻击日趋严重&#xff0c;近几年有关网络攻击和数据泄露的新闻层出不穷。因此&#xff0c;随着国家…

Planning-oriented Autonomous Driving 解析

abstract 现代自动驾驶系统通常是模块化的序列任务&#xff0c;这种方式很容易造成累积误差和任务协调不足&#xff0c;因此设计一个端到端架构&#xff0c;从全局的视角出发为agent的交互提供互补的特征提取。 introduction (a) Most industrial solutions deploy separate …

【QQ界面展示-获取监听到的通知的具体内容 Objective-C语言】

一、获取监听到的通知的具体内容 1.刚才这个没说啊,给大家补充一下, 我们看一下,刚才我们只说了一个通知的发布、和移除吧, 刚才我们这里,只是说了一个通知的发布、和移除吧, 以及监听, 那么,大家有没有发现, 我们一开始,给大家介绍的时候,是不是有两个对象啊,…

关于手机Camera的硬件电路知识

前阶段&#xff0c;小白教同事测了些Camere的基本功耗。正愁不知道写什么的小白&#xff0c;突然想到了素材&#xff0c;于是乎便趁着周末雷雨天宅家之际&#xff0c;写一篇关于手机Camere的硬件文章。 手机Camera 一、工作原理 关于Camera&#xff0c;景物通过镜头生成光学…

CRM软件能否代替Excel进行客户管理?

很多销售习惯使用Excel表格来管理客户&#xff0c;觉得这样既简单又方便。但随着客户的增多&#xff0c;使用Excel表格管理客户会带来很多问题。因此&#xff0c;客户管理不用Excel表格用CRM软件&#xff0c;是一种更加明智的选择。 1、统一管理数据 数据是企业的命脉。一旦客…

Python二级综合应用题:通讯录管理

Python二级考试中的最后一题一般是压轴题&#xff0c;有一定的难度&#xff0c;而且分值也高。此题一般分为1~3个问题&#xff0c;步步为赢&#xff0c;才能更好地解决。遇到这种问题&#xff0c;首先是不要怕&#xff0c;能解决几步是几步。今天我们一个通讯录管理题来说明一下…

Unbuntu下载Clion并配置Cmake工具

Clion 下载CLion安装Cmake工具 下载CLion 如果使用的是Unbuntu系统&#xff0c;一行命令就搞定了 sudo snap install clion --classic其他系统的下载方法就不在这里记载了 安装Cmake工具 刚下好Clion的时候&#xff0c;打开之后&#xff0c;如果没有Cmake工具.Clion是不会帮…

父亲节礼物:用Python编写一个小型游戏

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 安装必要的库 绘制游戏界面 添加游戏元素 为游戏添加交互性 结论 一、父亲节的来历简介 二…