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
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
用Java实现简单计算器功能
Jul 21 Java/Android
Java获取e.printStackTrace()打印的信息方式
Aug 07 Java/Android
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
Sep 25 Java/Android
利用Sharding-Jdbc进行分库分表的操作代码
Jan 22 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
SpringBoot2零基础到精通之数据与页面响应
Mar 22 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
Android存储中最基本的文件存储方式
Apr 30 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 eval函数使用介绍
2013/12/08 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
tagName的使用,留一笔
2006/06/26 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
ElementUI radio组件选中小改造
2019/08/12 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
设计毕业生简历中的自我评价
2013/10/01 职场文书
50岁生日感言
2014/01/23 职场文书
创业计划书如何编写
2014/02/06 职场文书
运动会入场式解说词
2014/02/18 职场文书
协议书样本
2014/04/23 职场文书
初中语文教学反思范文
2016/03/03 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python