内容简介: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
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective C++
梅耶 (Scott Meyers) / 侯捷 / 电子工业出版社 / 2011-1-1 / 65.00元
《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。世界项级C++大师scott Meyers成名之作的第三版的确当得起这样的评价。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机......一起来看看 《Effective C++》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
JSON 在线解析
在线 JSON 格式化工具