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实现简易的分词器功能
Jun 15 Java/Android
详解Java ES多节点任务的高效分发与收集实现
Jun 30 Java/Android
SpringBoot整合Mybatis Generator自动生成代码
Aug 23 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
Jan 18 Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 Java/Android
springboot 自定义配置 解决Boolean属性不生效
Mar 18 Java/Android
零基础学java之带返回值的方法的定义和调用
Apr 10 Java/Android
Android studio 简单计算器的编写
May 20 Java/Android
Android开发手册Chip监听及ChipGroup监听
Jun 10 Java/Android
使用Postman测试需要授权的接口问题
Jun 21 Java/Android
SpringBoot Http远程调用的方法
Aug 14 Java/Android
Android移动应用开发指南之六种布局详解
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实现多级树型菜单
2006/10/09 PHP
深入php处理整数函数的详解
2013/06/09 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
js实现上传图片之上传前预览图片
2013/03/25 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
js倒计时抢购实例
2015/12/20 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
Vue异步加载about组件
2017/10/31 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
基于canvas实现手写签名(vue)
2020/05/21 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
Python MD5文件生成码
2009/01/12 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python获取外网ip地址的方法总结
2015/07/02 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
Django model反向关联名称的方法
2018/12/15 Python
如何获取Python简单for循环索引
2019/11/21 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
python实现FTP循环上传文件
2020/03/20 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
火车的故事教学反思
2014/02/11 职场文书
家教广告词
2014/03/19 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
材料物理专业求职信
2014/09/01 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
质量承诺书格式范文
2015/04/28 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python