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如何使用logback实现多环境配置?
Jun 16 Java/Android
新手入门Jvm-- JVM对象创建与内存分配机制
Jun 18 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
深入浅出讲解Java8函数式编程
Jan 18 Java/Android
解决persistence.xml配置文件修改存放路径的问题
Feb 24 Java/Android
Netty客户端接入流程NioSocketChannel创建解析
Mar 25 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
Java 轮询锁使用时遇到问题
May 11 Java/Android
Java时间工具类Date的常用处理方法
May 25 Java/Android
Spring中bean集合注入的方法详解
Jul 07 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 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
简单的页面缓冲技术
2006/10/09 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
PHP URL路由类实例
2013/11/12 PHP
php实现加减法验证码代码
2014/02/14 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
详解Python中类的定义与使用
2017/04/11 Python
pandas 选择某几列的方法
2018/07/03 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
python时间time模块处理大全
2020/10/25 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
实习自我鉴定
2013/12/15 职场文书
毕业生的自我评价分享
2013/12/18 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
老师对学生的寄语
2014/04/09 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
java中如何截取字符串最后一位
2022/07/07 Java/Android