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并发编程之Executor接口的使用
Jun 21 Java/Android
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
总结一下关于在Java8中使用stream流踩过的一些坑
Jun 24 Java/Android
springboot集成flyway自动创表的详细配置
Jun 26 Java/Android
用Java实现简单计算器功能
Jul 21 Java/Android
Spring Security中用JWT退出登录时遇到的坑
Oct 16 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
Apr 08 Java/Android
详细介绍Java中的CyclicBarrier
Apr 13 Java/Android
Java 定时任务技术趋势简介
May 04 Java/Android
Java 多线程协作作业之信号同步
May 11 Java/Android
利用Java连接Hadoop进行编程
Jun 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
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
php实现文章评论系统
2019/02/18 PHP
js表数据排序 sort table data
2009/02/18 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
如何在存储过程中使用Loop
2016/01/05 面试题
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
校园活动宣传方案
2014/03/28 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
表扬信范文
2019/04/22 职场文书
MySQL数据管理操作示例讲解
2022/12/24 MySQL