因爲springboot新版本(2.1.0)、springcloud新版本(Greenwich.M1)實現鏈路追蹤sleuth+zipkin的一些「新特性」,使得我在實現sleuth+zipkin的過程上踩了很多坑。html
在springboot1.X版本的時候,實現鏈路追蹤服務須要用戶本身實現client以及server,一般在server服務端須要引入各類各樣的包(spring-cloud-sleuth-stream,以及支持zipkin的一些相關依賴包等等);java
但在spring cloud新版本實現鏈路追蹤sleuth+zipkin的方式上已經再也不須要本身再去實現一個server服務端(集成sleuth+zipkin),而是由zinkin官方提供了一個現成的zipkin-server.jar,或者是一個docker鏡像,用戶能夠下載並經過命令進行啓動它,用戶能夠通一些配置來肯定sleuth收集到信息後傳輸到zipkin之間採用http,仍是經過rabbit/kafka的方式。在新的版本下,用戶只須要關注slenth-client選用何種傳輸方式(http或mq(rabbit/kafka),若是選擇http,則在配置中指明base-url;若是選擇mq,則在配置指明相關消息中間件的相關信息host/port/username/password...),至於zipkin的信息storage問題,則由zipkin-server要負責,能夠經過zipkin-server.jar 配置一些具體的參數來啓動。(下面會細講)mysql
ps:這不是教程貼,這主要是解決一些問題的一些方法,不會有詳細的實現過程,但爲了簡明我會貼上部分代碼。git
最近開始實習了,老大讓我自學一下sc(spring cloud),學就學嘛,也不是難事。看完spring cloud的全家桶,老大說讓我重點了解一下它的鏈路追蹤服務,後期會有這方面的任務安排給我作,因此呢我就重點關注這一方面,打算本身作個demo練練手,看了網上的教程,膨脹的我選擇了個最新的版本,結果發現就這麼掉坑裏了。。。github
按照慣例,先說下springboot跟spring cloud的版本
springboot:2.1.0
springcloud:Greenwich.M1
我的建議新手不要過度追求新版本,舊版本的仍是夠用的,比springboot 2.6.0搭配sringcloud Finchley SR2仍是挺穩的,若是真的要探索新版本你會發現這裏面的坑實在是踩不完,基本要花個一兩天才能讓本身從坑裏跳出去,這樣頻繁踩坑會讓新手很容易放棄~~~
ps:不要問我爲何知道。。。spring
閒話扯完了,能夠進入正題了
一共四個服務
eureka-server
zipkin-server:新版本的zipkin服務端,負責接受sleuth發送過來的數據,完成處理、存儲、創建索引,而且提供了一個可視化的ui數據分析界面。
須要的同窗話能夠直接在github上下載https://github.com/openzipkin...sql
嗯就是這兩個傢伙
下面兩個是兩個服務chrome
eureka-server服務註冊中心,這個實現我就不講了,網上搜一大把,各個版本實現基本都是一致的,並不存在版本更新跨度極大的狀況。並且這裏我把它是打包成一個jar包,在須要的時候直接用java -jar XXX.jar 直接啓動docker
至於product跟order(也即實際場景下各類種樣的服務A、B、C...)數據庫
order服務只有一個接口/test,去調用product的接口
這裏的productclient就是使用feignf去調用order的/product/list接口
product只有一個接口/product/list,查找全部商品的列表
簡單的來講,這裏的場景就是order服務--(去調用)-->product服務
說完場景後,貼一下這兩個服務的相關配置信息(order跟producet的配置基本上是相同的)
application.yml
spring: application: #服務名 name: product #因爲業務邏輯須要操做數據庫,因此這裏配置了mysql的一些信息 datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/sc_sell?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai jpa: show-sql: true #重點 zipkin: #base-url:當你設置sleuth-cli收集信息後經過http傳輸到zinkin-server時,須要在這裏配置 base-url: http://localhost:9411 enabled: true sleuth: sampler: #收集追蹤信息的比率,若是是0.1則表示只記錄10%的追蹤數據,若是要所有追蹤,設置爲1(實際場景不推薦,由於會形成不小的性能消耗) probability: 1 eureka: client: service-url: #註冊中心地址 defaultZone: http://localhost:8999/eureka/ logging: level: #這個是設置feign的一個日誌級別,key-val的形式設置 org.springframework.cloud.openfeign: debug
說完配置信息,就該講一下依賴了,很簡單,client實現鏈路追蹤只須要添加一個依賴spring-cloud-starter-zipkin。就是這個
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
其實這些都是基礎操做,是吧,那麼來點進階的。
若是你是剛開始學習sc,給你去實現的話,你確定會開始打開瀏覽器開始搜索教程。
結果你會發現,大部分博客上都是之前版本的實現方式,一些較舊會讓你本身實現一個zipkin-server(我懷疑他們的版本是1.x),你會發現很鬱悶,由於這跟你想象的不太同樣啊。
繼續找,終於在茫茫帖子中,找到了一篇是關於springboot2.0.X版本的實現鏈路追蹤的教程,這時候你會興奮,終於找到靠譜一點的啊,喜出望外有木有啊,可是,事情還沒完,它會讓你在客戶端依賴下面這個依賴包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-stream</artifactId> </dependency>
結果你會發現,你在依賴它的時候,實際上是依賴不了,爲何?由於版本的問題,什麼?你跟我說你的pom文件沒報錯啊,可是,你打開idea右邊的maven插件看一下
這真的是一個巨坑,我一直不明白是怎麼回事,直到有一次,我打開了這個頁面,花了我一天的時間去摸索是什麼緣由形成的集成rabbitmq失敗,真的是被安排得明明白白
最後,豪無頭緒的我,繼續在網上查找一些springboot2.x版本的一些鏈路追蹤的教程,在搜索了一個下午,我忽然想起,誒不對,我應該直接去官網看它的官方教程的啊。。。雖然都英文,大不了我用chrome自帶的翻譯工具翻譯一下咯。結果就立馬打開spring的官網,選擇了最新的版本,進去找了一下,還真的讓我找到了!!!
不得不說官方文檔的重要性!
https://cloud.spring.io/sprin...