dubbo集成zipkin獲取Traceid的實現(xiàn)
dubbo集成zipkin獲取Traceid
dubbo集成zipkin有java的客戶端brave,實現(xiàn)原理的通過定義Filter來實現(xiàn)的,然后通過RpcContext.getContext().getAttachments()來獲取,通過RpcContext.getContext()來傳遞。
按照dubbo官網(wǎng)的博客配置了這個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過濾器,在執(zhí)行了TracingFilter之后呢,rpc的上下文RpcContext.getContext().getAttachments()里面就有這些traceId和spanId了,可以使用類似ThreadLocal這樣的保存在當前線程的上下文里面,然后在使用的地方獲取一下。
具體實現(xiàn):
再自定義一個dubbo的過濾器,掛在zipkin的過濾器的后面,類似這樣,掛兩個過濾器,自定義的過濾器放在zipkin的過濾器的后面,在自定義的過濾器使用RpcContext.getContext().getAttachments()獲取前面那個zipkin過濾器里面的自定義參數(shù)。
方法二
如果使用的springboot項目直接使用spring-cloud-starter-zipkin來打印更方便,并且可以直接在代碼里獲取traceId和spanId
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java實現(xiàn)Linux(centos) 中docker容器下命令交互的代碼(配置向導)
小編在開發(fā)項目時遇到個需求,因為系統(tǒng)部署每次都要多臺機器拆分部署,很麻煩,怎么配置比較方便呢,今天小編給大家介紹java實現(xiàn)Linux(centos) 中docker容器下命令交互的代碼(配置向導),感興趣的朋友一起看看吧2021-05-05SpringMVC HttpMessageConverter消息轉換器
??HttpMessageConverter???,報文信息轉換器,將請求報文轉換為Java對象,或將Java對象轉換為響應報文。???HttpMessageConverter???提供了兩個注解和兩個類型:??@RequestBody,@ResponseBody???,??RequestEntity,ResponseEntity??2023-04-04idea創(chuàng)建springboot項目和springcloud項目的詳細教程
這篇文章主要介紹了idea創(chuàng)建springboot項目和springcloud項目方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10Springboot中useGeneratedKeys用法小結
本文主要介紹了Springboot中useGeneratedKeys用法小結,useGeneratedKeys?是 MyBatis 框架中的一個參數(shù),用于指定是否允許 JDBC 支持自動生成主鍵,感興趣的可以了解一下2024-09-09Springboot整合Redis實現(xiàn)超賣問題還原和流程分析(分布式鎖)
最近在研究超賣的項目,寫一段簡單正常的超賣邏輯代碼,多個用戶同時操作同一段數(shù)據(jù)出現(xiàn)問題,糾結該如何處理呢?下面小編給大家?guī)砹薙pringboot整合Redis實現(xiàn)超賣問題還原和流程分析,感興趣的朋友一起看看吧2021-10-10