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 相关文章推荐
Java循环队列与非循环队列的区别总结
Jun 22 Java/Android
SpringCloud的JPA连接PostgreSql的教程
Jun 26 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
解决Swagger2返回map复杂结构不能解析的问题
Jul 02 Java/Android
Spring Cloud Gateway去掉url前缀
Jul 15 Java/Android
Spring Boot 排除某个类加载注入IOC的操作
Aug 02 Java/Android
详解Java七大阻塞队列之SynchronousQueue
Sep 04 Java/Android
Android Rxjava3 使用场景详解
Apr 07 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
Android studio 简单计算器的编写
May 20 Java/Android
HttpClient实现表单提交上传文件
Aug 14 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
Python 获得13位unix时间戳的方法
2017/10/20 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
Python创建数字列表的示例
2019/11/28 Python
Python yield的用法实例分析
2020/03/06 Python
java字符串格式化输出实例讲解
2021/01/06 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
大学生职业生涯规划范文
2014/01/22 职场文书
围城读书笔记
2015/06/26 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python