从AOP到分布式链路追踪

2023-11-09

1、aop介绍

面向切面的编程Aspect Oriented Programming,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。

2.1 spring aop

三个基础概念:

  • advice:定义拦截行为,以及执行时机。比较常见的,方法执行之前进行拦截,执行之后,环绕,以及发生异常之后等执行时机。
  • pointcut:切入点。哪些方法需要增强,通常使用execution表达式进行增强。
  • weaving:代码织入。通常代表spring对advice和pointcut的集合处理。
    在这里插入图片描述
    SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,并没有提供一种新的AOP实现方式,其底层逻辑为jdk与cglib动态代理。

2.2 jdk动态代理

package spring.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;

public class ProxyTest {
    
//    private static Log logProxy = new LogD();
//    private Advice advice;
    public static void main(String[] args) {
        Log log = (Log) Proxy.newProxyInstance(ProxyTest.class.getClassLoader(), LogD.class.getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("pre invoke log");
                Object result = method.invoke(new LogD(), args);
                System.out.println("after invoke log");
                return result;
            }
        });
        log.info("this is test !!1",222);
    }

}

interface Log {
    void info(Object... args);
}

class LogD implements Log {

    @Override
    public void info(Object... args) {
        System.out.println(String.format("log info %s", Arrays.toString(args)));
    }
}


2、分布式链路追踪

Dapper

故障快速定位:可以通过调用链结合业务日志快速定位错误信息。

链路性能可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来。

链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景。

在这里插入图片描述
https://pics2.baidu.com/feed/7af40ad162d9f2d3fd977039b26b8a1a6127ccf6.png?token=30fa37fc2fd2aef6c3d0274b2b3fc173

2.1 日志规范

主要记录TraceId,SpanId等链路分析标识。

2.2 Spring Log组件

有时间再来更新吧。。

2.3 MDC介绍以及使用

logback自定义MessageConverter

3、接入

3.1 侵入式接入

3.2 aop接入

4、中间件skywalking

4.1 基本原理介绍

4.2 agent示例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从AOP到分布式链路追踪 的相关文章

  • Android:对于具有 LinearLayout 定义的成员的 ListView,上下文菜单不显示?

    我有一个 ListActivity 和 ListView 并且我已将一些数据绑定到它 数据显示得很好 而且我还为视图注册了一个上下文菜单 当我将列表项显示为简单的 TextView 时 它工作正常
  • UcanaccessSQLException:UCAExc:::3.0.1 表达式的数据类型不是布尔值

    我有一张如下图所示的表格 我需要获取其库尔德语单词包含的所有英语单词 r 所以我不能使用 select English from Table1 where Kurdish like 因为它还接受另一个单词中的子字符串 例如 当我尝试在查询中
  • 仅使用公钥在 HD 钱包中生成以太坊地址 (bitcoinj/web3j)

    我尝试为使用 bitcoinj 库实现的 HD 钱包密钥生成以太坊地址 但我感到困惑 DeterministicSeed seed new DeterministicSeed some seed code here null 1409478
  • Java:while循环冻结程序

    我正在制作一个游戏 我需要每 3 秒更新一次 JProgressBar 为此 我使用 while 循环 问题是我的程序由于 while 循环而冻结 我在其他问题中读到它 他们没有帮助我解决这个问题 我不知道如何解决 这是我的代码 publi
  • org.openqa.selenium.NoSuchSessionException:会话 ID 为空。调用 quit() 后使用 WebDriver?

    我已经进行了一些搜索 但仍然遇到同样的问题 我相信这可能是由于我的网络驱动程序是静态的造成的 我不太确定 在我的主课中 我包括了 BeforeTest and AfterTest BeforeTest包括根据我的 XML 文件启动新浏览器
  • Eclipse 无法识别 persistence.xml 的内容

    我在 eclipse 中收到以下错误 persistence xml 文件没有可识别的内容 我的 persistence xml 文件在我的应用程序中工作得很好 但 eclipse 一直给我这个错误 我在移动文件并使用 m2eclipse
  • 为什么不自动装箱泛型的 Java 基本类型?

    Java 不允许在通用数据结构中使用原始类型 例如 不允许使用 ArrayList 原因是 原始类型不能直接转换为Object 然而 Java 1 5 确实支持自动装箱 并且包装类在通用数据结构中工作 那么为什么编译器不能将其自动装箱到 A
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • java.lang.ClassNotFoundException: org.jboss.logging.Logger

    我有一个奇怪的问题 我有一个JMS https en wiktionary org wiki JMS客户端应用程序和MDB https en wikipedia org wiki Enterprise JavaBeans Message d
  • 不使用 length() 方法的字符串长度[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在不使用字符串的情况下找到字符串的长度length String类的方法 str toCharArray length应该管用 或者怎么
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • gwt 文本框添加更改处理程序

    我有一个从设计师那里收到的文本框 但是我在 GWT 中编写了操作 问题是文本框为空 但是当通过按下按钮用值填充文本框时 将显示警报框 通知值已更改 但没有成功 帮助我 TextBox zip1 null function onModuleL
  • 短 2 个字节

    我正在从串行端口读取一个长度为 133 字节的数据包 最后 2 个字节包含 CRC 值 我使用 Java 将 2 个字节值制成单个 我认为很短 这就是我所做的 short high 48 0x00ff short low 80 short
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我
  • 空检查时可能未初始化错误

    我正在检查变量是否已初始化 但此时 netbeans 给了我variable reader might not have been initialized警告 我该如何解决 抑制这个问题 这是我的代码 摘要 final Reader rea
  • Android Webview:无法调用确定的可见性() - 从未见过 pid 的连接

    我有一个 Android Webview 当我单击链接下载文件 pdf 图像等 时 我收到一条错误消息 Error message Cannot call determinedVisibility never saw a connectio
  • 将其元素添加到另一个列表后清除列表

    我正在做一个程序 它获取更多句子作为参数 我制作了 2 个列表 一个称为 propozitie 其中包含每个句子 另一个称为 propozitii 其中包含所有句子 问题是 当我在遇到 后清除 propozitie 列表时 它也会清除 pr
  • removeall 和removeif 的用例

    我找到了这个 fun main val list MutableList

随机推荐

  • SQLServer数据库数据备份的几种方法

    采用MS SQLServer数据库 在开发的过程中 需要对数据库的结构及数据进行备份 以便在另一个系统中进行安装和恢复 一般采用以下四种方法来处理 1 对数据库生成SQL脚本 恢复时通过查询分析器执行脚本 2 对数据库执行备份操作 恢复时先
  • 明年,HarmonyOS不再兼容Android应用!

    2023年华为开发者大会 不知道各位老铁们是否观看了 一个震撼的消息就是 首次公开了HarmonyOS NEXT的概念 简而言之就是 这是一款专为开发者打造的预览版操作系统 旨在提供 纯正鸿蒙操作系统 的体验 与之前的版本不同 Harmon
  • SpringBoot系列FastJson篇之@JsonField

    在实际运用中 JsonField主要有三个用处 1 修改和json字符串的字段映射 name 2 格式化数据 format 3 过滤掉不需要序列化的字段 serialize 首先声明在低版本中区分注解加在setter和getter方法 而高
  • Java的运算符

    目录 一 什么是运算符 二 算术运算符 1 基本四则运算符 加减乘除模 2 增量运算符 3 自增 自减运算符 三 关系运算符 四 逻辑运算符 重点 1 逻辑与 2 逻辑或 3 逻辑非 4 短路求值 五 位运算符 1 按位与 2 按位或 3
  • python定义函数求和_Python定义函数实现累计求和操作

    一 使用三种方法实现0 n累加求和 定义函数分别使用while循环 for循环 递归函数实现对0 n的累加求和 1 使用while循环 定义一个累加求和函数sum1 n 函数代码如下 2 使用 for循环 定义一个累加求和函数sum2 n
  • c++虚函数详解

    1 虚函数的简介 由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数 所以被成为 虚 函数 用父类型别的指针指向其子类的实例 然后通过父类的指针调用实际子类的成员函数 这种技术可以让父类的指针有 多种形态 这是一种泛型技术
  • 优先队列的实践

    一 使用背景 对于前 k 大或前 k 小这类问题 有一个通用的解法 优先队列 优先队列可以在 O log n 的时间内完成插入或删除元素的操作 其中 n 为优先队列的大小 并可以 O 1 地查询优先队列顶端元素 二 前K个高频单词 给定一个
  • 巡检过程中有哪些注意事项?智能巡检了解一下

    智能巡检系统是现场过程管理的生产力革命 由人工记录蝶化为掌上电脑运作 适用于设备运行值班记录 仓库 资产管理 设备巡检保养 安全巡更 机房值守 基站维护等一切重复性的工作管理 安全巡检的目的在于识别信息系统存在的安全脆弱性 分析信息系统存在
  • C++:构造/析构/赋值运算(Effective C++)

    文章目录 写在前面 05 了解C 默默编写并调用哪些函数 06 若不想使用编译器自动生成的函数 就该明确拒绝 10 令operator 返回一个reference to this 11 在operator 中处理 自我赋值 12 复制对象时
  • linux网络测速qerf,www.n5fe.com

    河北承德电信 104 27 149 3 CLOUDFLARE COMcloudflare com 200 0 937s 0 019s 0 182s 0 003s 0 35KB 936 667Kb s 查看 HTTP 1 1 200 OK D
  • java构建菜单权限树形结构给前端

    1 建个菜单权限表 CREATE TABLE system permission id bigint 19 NOT NULL COMMENT id permission name varchar 50 CHARACTER SET utf8m
  • 微信分布式数据存储协议对比——Paxos和Quorum

    微信分布式数据存储协议对比 Paxos和Quorum 2017 4 19 1 36 00 作者丨莫晓东 责编丨仲培艺 分布式系统是网络化的计算机系统 海量数据的互联网应用只能通过分布式系统协调大量计算机来支撑 微信后台存储大量使用了分布式数
  • 夏普GP2Y0AYK0F红外测距传感器在STM32F103C8T6中的使用及电压转换公式。

    夏普GP2Y0AYK0F红外测距传感器在STM32F103C8T6中的使用及电压转换公式 1 夏普GP2Y0AYK0F红外测距传感器介绍 参数介绍 品牌 夏普SHARP 型号 GP2Y0A21YK0F 产地 日本 Japan 类型 红外测距
  • 企业数字化转型成熟度模型首个IOMM标准发布 企业数字化有章可循

    科技云报道原创 9月8日 由中国信息通信研究院 简称 中国信通院 云计算与大数据研究所 中国通信标准化协会云计算标准和开源推进委员会主办 云计算开源产业联盟承办的 企业数字化转型IOMM发布会 在线召开 会上中国信通院联合银行 保险 能源
  • TSDB时序数据库-OpenTSDB

    TSDB时序数据库 OpenTSDB 背景 一 概念 二 使用引入 背景 需要及时获取短信发送消息队列的堆积情况 pass将相关信息及时的存入了opentsdb时序数据库中 现需要读取时序数据库将堆积情况以短信形式通知 一 概念 时间序列数
  • Java基础----常用类

    0 Intellij Idea 快捷键 ALT SHIFT 0 生成构造器或setter getter IDEA的Debug IDEA导入已有的模块 1 字符串相关的类 1 1 String类 String源码 public final c
  • 【核磁共振成像】临床基本通用脉冲序列

    目录 一 脉冲序列 二 自旋回波 SE 脉冲序列 2 1 自旋回波脉冲序列 2 2 信噪比 差噪比 2 3 采样 2 4 改进的自旋回波变型序列 三 反向恢复 IR 脉冲序列 3 1 反向恢复脉冲序列 3 2 关于反向恢复脉冲序列的改进 四
  • RDS for MySQL 物理备份文件恢复到自建数据库

    文档在这 我主要说下注意事项 https help aliyun com knowledge detail 41817 html 操作系统中已安装数据恢复工具Percona XtraBackup 您可以从Percona XtraBackup
  • 机器学习-算法决策树学习笔记(详解)

    决策树的概念 决策树是一种非参数的监督学习方法 既可以用于分类 也可以用于回归 决策树的目标是创建一个模型 从数据特征中进行学习 进而推断出简单决策规则 用来预测目标变量的值 决策树的决策过程就是从根节点开始 测试待分类项中对应的特征属性
  • 从AOP到分布式链路追踪

    文章目录 1 aop介绍 2 1 spring aop 2 2 jdk动态代理 2 分布式链路追踪 2 1 日志规范 2 2 Spring Log组件 2 3 MDC介绍以及使用 3 接入 3 1 侵入式接入 3 2 aop接入 4 中间件