dubbo集成zipkin获取Traceid的实现

 更新时间:2021年07月26日 11:33:14   作者:madman1990  
这篇文章主要介绍了dubbo集成zipkin获取Traceid的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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过滤器里面的自定义参数。

在这里插入图片描述 在这里插入图片描述

方法二

如果使用的springboot项目直接使用spring-cloud-starter-zipkin来打印更方便,并且可以直接在代码里获取traceId和spanId

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Windows下java、javaw、javaws以及jvm.dll等进程的区别

    Windows下java、javaw、javaws以及jvm.dll等进程的区别

    这篇文章主要介绍了Windows下java、javaw、javaws以及jvm.dll等进程的区别,本文分别讲解了它们的作用并给出代码实例,最后做出了区别总结,需要的朋友可以参考下
    2015-03-03
  • mybatisPlus中apply的使用以进行联表等复杂sql语句详解

    mybatisPlus中apply的使用以进行联表等复杂sql语句详解

    在MyBatis-Plus中,`apply()`方法可以用于添加任意的SQL片段,包括联表查询,使用`apply()`方法的好处是可以直接添加原生的SQL片段,而不受MyBatis-Plus提供的常规查询条件构建方法的限制,但是,使用`apply()`方法需要注意安全性和性能问题
    2025-03-03
  • springboot项目打包成jar包的图文教程

    springboot项目打包成jar包的图文教程

    有时候我们会用IDEA来开发一些小工具,需要打成可运行的JAR包,这篇文章主要给大家介绍了关于springboot项目打包成jar包的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • java.net.URL超时时间默认无限制问题小结

    java.net.URL超时时间默认无限制问题小结

    文章介绍了如何在Java中使用URLConnection或HttpURLConnection设置连接和读取超时,以处理网络问题导致的长时间等待,通过httpstat.us网站可以测试不同延迟的请求,并演示了如何通过调整超时时间处理超时异常,感兴趣的朋友一起看看吧
    2025-02-02
  • JAVA中Collections工具类sort()排序方法

    JAVA中Collections工具类sort()排序方法

    这篇文章主要介绍了JAVA中Collections工具类sort()排序方法,非常具有实用价值,需要的朋友可以参考下。
    2016-11-11
  • Java concurrency之集合_动力节点Java学院整理

    Java concurrency之集合_动力节点Java学院整理

    Java集合主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合),有需要的小伙伴可以参考下
    2017-06-06
  • java之Timer和TimerTask简单demo(分享)

    java之Timer和TimerTask简单demo(分享)

    下面小编就为大家带来一篇java之Timer和TimerTask简单demo(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Java如何按16进制发送和接收TCP指令

    Java如何按16进制发送和接收TCP指令

    这篇文章主要介绍了Java如何按16进制发送和接收TCP指令问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • SpringBoot使用redis生成订单号的实现示例

    SpringBoot使用redis生成订单号的实现示例

    在电商系统中,生成唯一订单号是常见需求,本文介绍如何利用SpringBoot和Redis实现订单号的生成,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • Java实现截取视频第一帧的示例详解

    Java实现截取视频第一帧的示例详解

    在实际项目中,会遇到上传视频后,需要截取视频的首帧或指定帧为图片,作为展示使用的需求,下面小编就来为大家介绍一下如何使用Java实现截取视频第一帧吧
    2025-03-03

最新评论