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 相关文章推荐
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
Spring Data JPA使用JPQL与原生SQL进行查询的操作
Jun 15 Java/Android
Spring中bean的生命周期之getSingleton方法
Jun 30 Java/Android
Java 泛型详解(超详细的java泛型方法解析)
Jul 02 Java/Android
Java基础-封装和继承
Jul 02 Java/Android
深入浅出讲解Java8函数式编程
Jan 18 Java/Android
springboot+zookeeper实现分布式锁
Mar 21 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
Android Studio实现带三角函数对数运算功能的高级计算器
May 20 Java/Android
Mybatis-plus配置分页插件返回统一结果集
Jun 21 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
php防注
2007/01/15 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
thinkphp连贯操作实例分析
2014/11/22 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
laravel入门知识点整理
2020/09/15 PHP
自定义jQuery选项卡插件实例
2013/03/27 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
详解Python中break语句的用法
2015/05/14 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
python Django批量导入不重复数据
2016/03/25 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
Python生成器常见问题及解决方案
2020/03/21 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
西安众合通用.net笔试题
2013/03/18 面试题
《夏夜多美》教学反思
2014/02/17 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
学习保证书怎么写
2015/02/26 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
企业宣传语大全
2015/07/13 职场文书
初二数学教学反思
2016/02/17 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
python 调用js的四种方式
2021/04/11 Python
比较node.js和Deno
2021/04/27 Javascript