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 Data JPA的Audit功能审计数据库的变更
Jun 26 Java/Android
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
Java 数组内置函数toArray详解
Jun 28 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
springboot中rabbitmq实现消息可靠性机制详解
Sep 25 Java/Android
Springboot如何同时装配两个相同类型数据库
Nov 17 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
Java Lambda表达式常用的函数式接口
Apr 07 Java/Android
SpringCloud Function SpEL注入漏洞分析及环境搭建
Apr 08 Java/Android
IDEA 2022 Translation 未知错误 翻译文档失败
Apr 24 Java/Android
Android在Sqlite3中的应用及多线程使用数据库的建议
Apr 24 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 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
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
JavaScript 10件让人费解的事情
2010/02/15 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
Javascript操作select控件代码实例
2020/02/14 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
python fabric使用笔记
2015/05/09 Python
python下MySQLdb用法实例分析
2015/06/08 Python
Python中的字符串替换操作示例
2016/06/27 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
使用python去除图片白色像素的实例
2019/12/12 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
Java语言程序设计测试题判断题部分
2013/01/06 面试题
后备干部考察材料
2014/02/12 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
商务邀请函
2015/01/30 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android