内容简介:SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo
关注 微信公众号:【芋道源码】 有福利:
- RocketMQ / MyCAT / Sharding-JDBC 所有 源码分析文章列表
- RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
- 您对于源码的疑问每条留言 都 将得到 认真 回复。 甚至不知道如何读源码也可以请教噢 。
- 新的 源码解析文章 实时 收到通知。 每周更新一篇左右 。
- 认真的 源码交流微信群。
1. 概述
本文主要分享 SkyWalking Agent Dubbo 插件 。涉及到的代码不多,如下图:
2. DubboInstrumentation
在 skywalking-plugin.def
里,定义了插件,如下图:
org.skywalking.apm.plugin.tomcat78x.define.TomcatInstrumentation
,实现 ClassInstanceMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:
- 基于 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 对象。
- 第 112 至 115 行:当返回结果包含异常时,调用
-
#handleMethodException(...)
方法,调用#dealException(Throwable)
方法,处理异常。
666. 彩蛋
一大波插件来袭,继续!
胖友,分享一波朋友圈。
以上所述就是小编给大家介绍的《SkyWalking 源码分析 —— Agent 插件(二)之 Dubbo》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 急速 debug 实战三(Node - webpack插件,babel插件,vue源码篇)
- Cloud Studio 优秀插件一览 | 附源码
- Android 插件化框架 DynamicLoadApk 源码分析
- 每日一博 | 深入分析 源码级别解读 MyBatis 插件
- SkyWalking 源码分析 —— Agent 插件(一)之 Tomcat
- SkyWalking 源码分析 —— Agent 插件(三)之 SpringMVC
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!