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内存模型之happens-before概念详解
Jun 13 Java/Android
Spring中bean的生命周期之getSingleton方法
Jun 30 Java/Android
SpringBoot集成Druid连接池连接MySQL8.0.11
Jul 02 Java/Android
swagger如何返回map字段注释
Jul 03 Java/Android
Java 语言中Object 类和System 类详解
Jul 07 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
Dec 06 Java/Android
spring注解 @PropertySource配置数据源全流程
Mar 25 Java/Android
springcloud整合seata
May 20 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 Java/Android
Spring Security动态权限的实现方法详解
Jun 16 Java/Android
Mybatis 一级缓存和二级缓存原理区别
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
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
详解JS对象封装的常用方式
2016/12/30 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
python实现求最长回文子串长度
2018/01/22 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
优秀应届毕业生推荐信
2014/02/18 职场文书
管理标语大全
2014/06/24 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
办公室文员岗位职责
2015/02/04 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
房贷工资证明范本
2015/06/12 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
关于的python五子棋的算法
2022/05/02 Python