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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

The Smashing Book

The Smashing Book

Jacob Gube、Dmitry Fadeev、Chris Spooner、Darius A Monsef IV、Alessandro Cattaneo、Steven Snell、David Leggett、Andrew Maier、Kayla Knight、Yves Peters、René Schmidt、Smashing Magazine editorial team、Vitaly Friedman、Sven Lennartz / 2009 / $ 29.90 / € 23.90

The Smashing Book is a printed book about best practices in modern Web design. The book shares technical tips and best practices on coding, usability and optimization and explores how to create succes......一起来看看 《The Smashing Book》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具