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 11 Java/Android
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
java设计模式--建造者模式详解
Jul 21 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
Java中API的使用方法详情
Apr 06 Java/Android
java实现自定义时钟并实现走时功能
Jun 21 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 Java/Android
Spring Cloud OAuth2实现自定义token返回格式
Jun 25 Java/Android
利用Java连接Hadoop进行编程
Jun 28 Java/Android
Spring中bean集合注入的方法详解
Jul 07 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 Java/Android
SpringBoot深入分析讲解监听器模式下
Jul 15 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 MVC框架skymvc支持多文件上传
2016/05/26 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
德国拖鞋网站:German Slippers
2019/11/08 全球购物
浙江文明网签名寄语
2014/01/18 职场文书
高一地理教学反思
2014/01/18 职场文书
党员党性分析材料
2014/02/17 职场文书
白酒市场营销方案
2014/02/25 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
银行培训心得体会范文
2016/01/09 职场文书
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python