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 相关文章推荐
Spring Cache和EhCache实现缓存管理方式
Jun 15 Java/Android
图解排序算法之希尔排序Java实现
Jun 26 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
springboot 多数据源配置不生效遇到的坑及解决
Nov 17 Java/Android
java后台调用接口及处理跨域问题的解决
Mar 24 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
Spring Data JPA框架持久化存储数据到数据库
Apr 28 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
springboot 全局异常处理和统一响应对象的处理方式
Jun 28 Java/Android
Android实现图片九宫格
Jun 28 Java/Android
spring 项目实现限流方法示例
Jul 15 Java/Android
java获取一个文本文件的编码(格式)信息
Sep 23 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
解析htaccess伪静态的规则
2013/06/18 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
javascript 面向对象的JavaScript类
2010/05/04 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python实现整数的二进制循环移位
2019/03/08 Python
python区块及区块链的开发详解
2019/07/03 Python
200行python代码实现2048游戏
2019/07/17 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
django queryset相加和筛选教程
2020/05/18 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
python logging模块的使用详解
2020/10/23 Python
总务岗位职责
2013/11/19 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
法人授权委托书范本
2014/09/17 职场文书
企业百日安全活动总结
2015/05/07 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android