dubbo集成zipkin获取Traceid的实现


Posted in Java/Android onJuly 26, 2021

dubbo集成zipkin获取Traceid

dubbo集成zipkin有java的客户端brave,实现原理的通过定义Filter来实现的,然后通过RpcContext.getContext().getAttachments()来获取,通过RpcContext.getContext()来传递。

按照dubbo官网的博客配置了这个MDCScopeDecorator应该就可以做在日志里面使用[%X{traceId}/%X{spanId}来打印了,但是我的一致打印不出来,不知道为啥,然后就想了一个折中的方法。

<bean id="tracing" class="brave.spring.beans.TracingFactoryBean">
        <property name="localServiceName" value="hello-service"/>
        <property name="spanReporter">
            <bean class="zipkin2.reporter.beans.AsyncReporterFactoryBean">
                <property name="sender" ref="sender"/>
                <!-- wait up to half a second for any in-flight spans on close -->
                <property name="closeTimeout" value="500"/>
            </bean>
        </property>
        <property name="currentTraceContext">
            <bean class="brave.spring.beans.CurrentTraceContextFactoryBean">
                <property name="scopeDecorators">
                    <bean class="brave.context.slf4j.MDCScopeDecorator" factory-method="create"/>
                </property>
            </bean>
        </property>
    </bean>

一、dubbo中使用zipkin获取traceid折中方法

zipkin集成dubbo就是扩展了dubbo的filter过滤器,在执行了TracingFilter之后呢,rpc的上下文RpcContext.getContext().getAttachments()里面就有这些traceId和spanId了,可以使用类似ThreadLocal这样的保存在当前线程的上下文里面,然后在使用的地方获取一下。

具体实现:

再自定义一个dubbo的过滤器,挂在zipkin的过滤器的后面,类似这样,挂两个过滤器,自定义的过滤器放在zipkin的过滤器的后面,在自定义的过滤器使用RpcContext.getContext().getAttachments()获取前面那个zipkin过滤器里面的自定义参数。

dubbo集成zipkin获取Traceid的实现dubbo集成zipkin获取Traceid的实现

方法二

如果使用的springboot项目直接使用spring-cloud-starter-zipkin来打印更方便,并且可以直接在代码里获取traceId和spanId

dubbo集成zipkin获取Traceid的实现

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
手把手教你用SpringBoot将文件打包成zip存放或导出
Jun 11 Java/Android
SpringCloud的JPA连接PostgreSql的教程
Jun 26 Java/Android
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
死磕 java同步系列之synchronized解析
Jun 28 Java/Android
Java org.w3c.dom.Document 类方法引用报错
Aug 07 Java/Android
spring cloud 配置中心native配置方式
Sep 25 Java/Android
JavaWeb实现显示mysql数据库数据
Mar 19 Java/Android
SpringBoot整合Minio文件存储
Apr 03 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
Android开发手册自定义Switch开关按钮控件
Jun 10 Java/Android
详解Spring Security如何在权限中使用通配符
Jun 28 Java/Android
Java实现HTML转为Word的示例代码
Jun 28 Java/Android
dubbo服务整合zipkin详解
spring boot中nativeQuery的用法
Jul 26 #Java/Android
java泛型通配符详解
Jul 25 #Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 #Java/Android
SpringRetry重试框架的具体使用
Java反应式框架Reactor中的Mono和Flux
关于springboot 配置date字段返回时间戳的问题
Jul 25 #Java/Android
You might like
如何将数据从文本导入到mysql
2006/10/09 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
在vue中实现echarts随窗体变化
2020/07/27 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python通过yield实现数组全排列的方法
2015/03/18 Python
Python循环语句之break与continue的用法
2015/10/14 Python
python开发简易版在线音乐播放器
2017/03/03 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
Python 实现微信防撤回功能
2019/04/29 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
应用化学专业本科生求职信
2013/09/29 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
项目合作意向书模板
2014/07/29 职场文书
2014年稽查工作总结
2014/12/20 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android