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 相关文章推荐
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
JavaWeb Servlet实现网页登录功能
Jul 04 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
Java数据开发辅助工具Docker与普通程序使用方法
Sep 15 Java/Android
SpringDataJPA在Entity中常用的注解介绍
Dec 06 Java/Android
java objectUtils 使用可能会出现的问题
Feb 28 Java/Android
Java 关于String字符串原理上的问题
Apr 07 Java/Android
Android开发之底部导航栏的快速实现
Apr 28 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
Android Studio 计算器开发
May 20 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
Jun 14 Java/Android
基于Android10渲染Surface的创建过程
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
php set_time_limit()函数的使用详解
2013/06/05 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
Javascript调用C#代码
2011/01/17 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
JS二叉树的简单实现方法示例
2017/04/05 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
python使用cookielib库示例分享
2014/03/03 Python
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Django框架安装方法图文详解
2019/11/04 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
python super函数使用方法详解
2020/02/14 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
同事打架检讨书
2014/02/04 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
婚前协议书范本两则
2014/10/16 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
Vue监视数据的原理详解
2022/02/24 Vue.js