SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo

栏目: Java · 发布时间: 6年前

内容简介:SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo

SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo

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

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

1. 概述

本文主要分享 SkyWalking Agent Dubbo 插件 。涉及到的代码不多,如下图:

SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo

2. DubboInstrumentation

skywalking-plugin.def 里,定义了插件,如下图:

SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo

org.skywalking.apm.plugin.tomcat78x.define.TomcatInstrumentation ,实现 ClassInstanceMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:

SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo

  • 基于 MonitorFilter 过滤器实现

2.1 DubboInterceptor

org.skywalking.apm.plugin.dubbo.DubboInterceptor ,实现 InstanceMethodsAroundInterceptor 接口,DubboInstrumentation 的拦截器。 同时适用于 Dubbo 服务提供者与消费者 。代码如下:

  • #beforeMethod(...) 方法,若是服务提供者,创建 EntrySpan 对象;若是服务消费者,创建 ExitSpan 对象。代码如下:
    • —– 服务消费者 —–
    • 第 71 行:创建 ContextCarrier 对象。
    • 第 74 行:调用 ContextManager#createExitSpan(...) 创建 ExitSpan 对象,并将 链路追踪上下文注入到 ContextCarrier 对象 ,用于跨进程的链路追踪。其中,调用 #generateOperationName(URL, Invocation) 方法,生成操作名,例如: "org.skywalking.apm.plugin.test.Test.test(String)"
    • 第 79 至 83 行:设置 ContextCarrier 对象到 RPCContext ,从而将 ContextCarrier 对象 隐式传参
    • —– 服务提供者者 —–
    • 第 87 至 92 行:解析 ContextCarrier 对象,用于跨进程的链路追踪。在 《SkyWalking 源码分析 —— Agent 收集 Trace 数据》「 3.2.3 ContextCarrier 」 有详细解析。
    • 第 95 行:调用 ContextManager#createLocalSpan(operationName, contextCarrier) 方法,创建 EntrySpan 对象。
    • —– ALL —–
    • 第 99 至 72 行:设置 EntrySpan 对象的 url 标签键值对。其中,调用 #generateRequestURL(URL, Invocation) 方法,生成链接。例如, "dubbo://127.0.0.1:20880/org.skywalking.apm.plugin.test.Test.test(String)"
    • 第 102 行:设置 EntrySpan 对象的组件类型。
    • 第 105 行:设置 EntrySpan 对象的分层。
  • #afterMethod(...) 方法,完成 EntrySpan 对象。
    • 第 112 至 115 行:当返回结果包含异常时,调用 #dealException(Throwable) 方法,处理异常。
    • 调用 ContextManager#stopSpan() 方法,完成 EntrySpan 对象。
  • #handleMethodException(...) 方法,调用 #dealException(Throwable) 方法,处理异常。

666. 彩蛋

一大波插件来袭,继续!

SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo

胖友,分享一波朋友圈。


以上所述就是小编给大家介绍的《SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

迷茫的旅行商

迷茫的旅行商

[美] William J. Cook / 隋春宁 / 人民邮电出版社 / 2013-10-1 / 49.00

假设一名旅行商打算拜访一张城市列表中的所有城市,每座城市只去一次,最后回到出发地。要怎么走才能让路线最短呢?这就是旅行商问题,乍一听很简单,在应用数学界却是一道研究极其热烈的难题,时至今日仍无人能解。本书中,William J. Cook将带领读者踏上一场数学之旅,跟随旅行商的脚步,从19世纪初爱尔兰数学家W. R. Hamilton最初定义该问题开始,一路奔向当今最前沿、最顶尖的解题尝试。 ......一起来看看 《迷茫的旅行商》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具