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 相关文章推荐
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 Java/Android
ObjectMapper 如何忽略字段大小写
Jun 29 Java/Android
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 Java/Android
swagger如何返回map字段注释
Jul 03 Java/Android
dubbo服务整合zipkin详解
Jul 26 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
使用springMVC所需要的pom配置
Sep 15 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
Jun 01 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
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 stream_context_create()作用和用法分析
2011/03/29 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
Python实现把数字转换成中文
2015/06/29 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
Python自省及反射原理实例详解
2020/07/06 Python
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
怎样写好自荐信和推荐信
2013/12/26 职场文书
销售心得体会
2014/01/02 职场文书
会计主管岗位职责
2014/01/03 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
放射科岗位职责
2015/02/14 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书