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

在这里插入图片描述

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

相关文章

  • 一个牛人给Java初学者的建议(必看篇)

    一个牛人给Java初学者的建议(必看篇)

    下面小编就为大家带来一篇一个牛人给Java初学者的建议(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java实现FTP服务器功能实例代码

    Java实现FTP服务器功能实例代码

    FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议,本文给大家分享Java实现FTP服务器功能实例代码,对java实现ftp服务器相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • JavaWeb Hibernate使用全面介绍

    JavaWeb Hibernate使用全面介绍

    在正式进入Hibernate的高级应用之前,需要了解声明是数据模型与领域模型,这两个概念将会帮助我们更好的理解实体对象的关联关系映射
    2022-10-10
  • 详解Java分布式IP限流和防止恶意IP攻击方案

    详解Java分布式IP限流和防止恶意IP攻击方案

    这篇文章主要介绍了详解Java分布式IP限流和防止恶意IP攻击方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • mybatis修改int型数据无法修改成0的解决

    mybatis修改int型数据无法修改成0的解决

    这篇文章主要介绍了mybatis修改int型数据无法修改成0的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring cloud gateway工作流程原理解析

    Spring cloud gateway工作流程原理解析

    这篇文章主要介绍了Spring cloud gateway工作流程原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 详解JAVA 函数式编程

    详解JAVA 函数式编程

    这篇文章主要介绍了JAVA 函数式编程的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 30分钟入门Java8之默认方法和静态接口方法学习

    30分钟入门Java8之默认方法和静态接口方法学习

    这篇文章主要介绍了30分钟入门Java8之默认方法和静态接口方法学习,详细介绍了默认方法和接口,有兴趣的可以了解一下。
    2017-04-04
  • Java多线程中的ThreadLocal应用场景及问题解读

    Java多线程中的ThreadLocal应用场景及问题解读

    这篇文章主要介绍了Java多线程中的ThreadLocal应用场景及问题解读,ThreadLocal这个类在多线程并发中主要的使用场景是什么呢,我们都知道多线程并发问题实际就是多个线程对公共资源访问和修改问题,需要的朋友可以参考下
    2023-12-12
  • 详解Java关键字final

    详解Java关键字final

    今天带大家学习Java基础知识,文中对关键字final作了非常详细的介绍,对正在学习Java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05

最新评论