SpringCloud分布式鏈路跟蹤的方法
注:作者使用IDEA + Gradle
注:需要有一定的java SpringBoot and SSM+Springcloud基礎(chǔ)
程序測試錯誤追責
我舉個例子,我現(xiàn)在要做一個電商項目,項目里面有一個購買模塊,那我這邊可能要執(zhí)行一個代碼,比如減庫存之類的東西,那我兩個服務(wù)不就是要相互調(diào)用嘛,我自身是一個服務(wù),我現(xiàn)在要調(diào)用減庫存這個服務(wù);
你調(diào)用它,你知道它一定能執(zhí)行成功嗎?肯定是不一定;
比如說,我現(xiàn)在要執(zhí)行一個減庫存的代碼,我調(diào)用這個方法會進行庫存的一個更改,這個庫存減少成功還好,萬一要是失敗就會出現(xiàn)一個問題就是,做前端的來調(diào)用你,但是你出錯了,這時你也不知道你這個減庫存到底有沒有執(zhí)行成功,兩個人就會相互排斥問題,不知道到底是你前端調(diào)用的問題,還是我后端代碼寫的有毛病,反正測試工程師就只知道庫存沒有減;
解決方案就是,記日志;
記錄日志
首先,springboot里面有集成好的日志組件,我們僅需拿來用即可,接下來,我將會分幾個步驟來教大家如何在記日志;
1.首先我們打開一個編寫好的子項目(服務(wù)),在yml配置文件中進行一些簡單的配置👇:
logging: path: 日志打印輸出路徑 level: 該服務(wù)的全包名: #級別【info級別最好,我用的是debug級別】

2.在我們的Controllerc引入Logge接口👇:
public static Logger logger = LoggerFactory.getLogger(#當前類);
注意:引入Logger時,它有許多個記日志的版本,java統(tǒng)一了成了slf4j,所以導(dǎo)入包的時候一定注意不要導(dǎo)錯!

2.導(dǎo)入成功并且后需要把當前類加入到日志中👇:


3.開始調(diào)用日志
在控制層接口中調(diào)用日志
logger.debug("執(zhí)行了查詢,開始調(diào)用project-solr的服務(wù)");

這里的話就簡單的記錄一下日志,將來方便追錯;
4.運行程序,查看是日志是否能被記錄
首先運行注冊中心,再啟動自己寫好的服務(wù)朝注冊中心注冊一下
查看注冊中心:

發(fā)現(xiàn)solr注冊進來了,注冊中心我這邊用的是集群負載均衡,三個注冊中心相互注冊,在后面可以清楚的看到我另外三個注冊中心的端口號
5.調(diào)用solr服務(wù),查看日志是否輸出并打印👇:

點擊去查看一下👇:

總中我我們可以清楚的看到,從開始,到結(jié)束,就是中間打印了一些其他的東西,這個先不去深究它;
小結(jié)
在工作中,別人的代碼到底能不能執(zhí)行成功,你是保證不了的,唯有記日志,來證明自己的代碼沒有問題,從上我選擇在調(diào)用前打印日志,在調(diào)用后也打印了日志,說明我這個接口沒有問題,但是,你調(diào)用你的solr服務(wù),出現(xiàn)了問題,那是你的問題,跟我調(diào)用無關(guān),我正常調(diào)用沒問題,至于后面庫存沒有減少,那,就是你的問題;
給solr添加日志記錄
剛才我是以調(diào)用對方服務(wù)的方式來記錄日志,保證自己正常調(diào)用,那么,我們solr也應(yīng)該記錄一下日志,因為,它也保證不了調(diào)用solr的人,是否存在調(diào)用問題,所以,我要保證我solr正常執(zhí)行,為了證明我是沒有問題的,所以我們也給solr這個服務(wù)記錄日志;
很簡單,跟上面的一樣,我直接復(fù)制粘貼即可,但是這次稍微的改一下;
logging: path: C:\Users\30901\Desktop\log\project_solr level: com.lh.project.solr: info
注意:級別前面的包名需要更改成當前服務(wù)的包名,這次我在日志輸出路徑中多加了一個當前服務(wù)名,這樣打印出的日志就能分別出誰打印出來的;

注意,日志文件是自動生成出來的;
我們把項目跑起來,試試,看看日志能不能被成功輸出👇:

我們也可以清楚的看見,日志信息在這里打印的非常清楚;
這個是它自動生成的日志文件:

分布式鏈路追蹤
首先需要引入依賴:
compile 'org.springframework.cloud:spring-cloud-starter-sleuth'

根據(jù)以上的例子,兩個服務(wù)均需要用到用到分布式鏈路跟蹤,所以我們兩個兩個都配置一下;
加完所需依賴后,我們再進行日志的輸出,看看有什么區(qū)別👇:

區(qū)別就能發(fā)現(xiàn),前面多出來了一串亂碼,跟上面對比,就能看出來,那么具體是什么意思呢?
首先打印出來的日志有兩個,一個是調(diào)用方,一個是被調(diào)用方,我們打開這兩個日志來看一下:

這個時候,假設(shè),以上一個請求,其中一個有問題,那么,你就可以把這個有問題的這個亂碼跟被調(diào)用方里面的日志進行匹配,如果查詢到了,那么說明這兩個日志,對應(yīng)的是同一個請求,咱們就可以通過這個亂碼就可以判斷,這兩個服務(wù)調(diào)用的到底是不是屬于同一個請求;
這個亂碼分成三段:

第一高段請求方與調(diào)用方式一樣的,因為它們屬于同一個鏈路上,所以一樣,因此,我們可以通過第一段代碼,來跟蹤;
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中字符串轉(zhuǎn)int數(shù)據(jù)類型的三種方式
這篇文章主要介紹了Java中字符串轉(zhuǎn)int數(shù)據(jù)類型的三種方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
Java使用組件編寫窗口實現(xiàn)網(wǎng)上文件下載
這篇文章主要為大家詳細介紹了Java使用組件編寫窗口實現(xiàn)網(wǎng)上文件下載的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
設(shè)計模式之構(gòu)建(Builder)模式 建造房子實例分析
構(gòu)建模式主要用來針對復(fù)雜產(chǎn)品生產(chǎn),分離部件構(gòu)建細節(jié),以達到良好的伸縮性,考慮到設(shè)計模式來源于建筑學,因此舉一個建造房子的例子,需要的朋友可以參考下2012-12-12
Java設(shè)計模式之單態(tài)模式(Singleton模式)介紹
這篇文章主要介紹了Java設(shè)計模式之單態(tài)模式(Singleton模式)介紹,本文講解了如何使用單例模式、使用單例模式注意事項等內(nèi)容,需要的朋友可以參考下2015-03-03

