一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

2021-03-15 12:04方志朋 Java教程

本篇文章主要介紹了淺談Spring-cloud 之 sleuth 服務鏈路跟蹤,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

這篇文章主要講述服務追蹤組件zipkin,spring cloud sleuth集成了zipkin組件。

一、簡介

add sleuth to the classpath of a spring boot application (see below for maven and gradle examples), and you will see the correlation data being collected in logs, as long as you are logging requests.

—— 摘自官網

spring cloud sleuth 主要功能就是在分布式系統中提供追蹤解決方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相應的依賴即可。

二、服務追蹤分析

微服務架構上通過業務來劃分服務的,通過rest調用,對外暴露的一個接口,可能需要很多個服務協同才能完成這個接口功能,如果鏈路上任何一個服務出現問題或者網絡超時,都會形成導致接口調用失敗。隨著業務的不斷擴張,服務之間互相調用會越來越復雜。

淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

隨著服務的越來越多,對調用鏈的分析會越來越復雜。它們之間的調用關系也許如下:

淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

三、術語

span:基本工作單元,例如,在一個新建的span中發送一個rpc等同于發送一個回應請求給rpc,span通過一個64位id唯一標識,trace以另一個64位id表示,span還有其他數據信息,比如摘要、時間戳事件、關鍵值注釋(tags)、span的id、以及進度id(通常是ip地址)

span在不斷的啟動和停止,同時記錄了時間信息,當你創建了一個span,你必須在未來的某個時刻停止它。

trace:一系列spans組成的一個樹狀結構,例如,如果你正在跑一個分布式大數據工程,你可能需要創建一個trace。

annotation:用來及時記錄一個事件的存在,一些核心annotations用來定義一個請求的開始和結束

  1. cs - client sent -客戶端發起一個請求,這個annotion描述了這個span的開始
  2. sr - server received -服務端獲得請求并準備開始處理它,如果將其sr減去cs時間戳便可得到網絡延遲
  3. ss - server sent -注解表明請求處理的完成(當請求返回客戶端),如果ss減去sr時間戳便可得到服務端需要的處理請求時間
  4. cr - client received -表明span的結束,客戶端成功接收到服務端的回復,如果cr減去cs時間戳便可得到客戶端從服務端獲取回復的所有所需時間

將span和trace在一個系統中使用zipkin注解的過程圖形化:

淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

四、構建工程

基本知識講解完畢,下面我們來實戰,本文的案例主要有三個工程組成:一個server-zipkin,它的主要作用使用zipkinserver 的功能,收集調用數據,并展示;一個service-hi,對外暴露hi接口;一個service-miya,對外暴露miya接口;這兩個service可以相互調用;并且只有調用了,server-zipkin才會收集數據的,這就是為什么叫服務追蹤了。

4.1 構建server-zipkin

建一個spring-boot工程取名為server-zipkin,在其pom引入依賴:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<dependencies>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter</artifactid>
 </dependency>
 
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
 </dependency>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-test</artifactid>
  <scope>test</scope>
 </dependency>
 
 <dependency>
  <groupid>io.zipkin.java</groupid>
  <artifactid>zipkin-server</artifactid>
 </dependency>
 
 <dependency>
  <groupid>io.zipkin.java</groupid>
  <artifactid>zipkin-autoconfigure-ui</artifactid>
 </dependency>
 
 </dependencies>
 
 <dependencymanagement>
 <dependencies>
  <dependency>
  <groupid>org.springframework.cloud</groupid>
  <artifactid>spring-cloud-dependencies</artifactid>
  <version>camden.sr6</version>
  <type>pom</type>
  <scope>import</scope>
  </dependency>
 </dependencies>
 </dependencymanagement>

在其程序入口類, 加上注解@enablezipkinserver,開啟zipkinserver的功能:

?
1
2
3
4
5
6
7
8
@springbootapplication
@enablezipkinserver
public class serverzipkinapplication {
 
 public static void main(string[] args) {
 springapplication.run(serverzipkinapplication.class, args);
 }
}

在配置文件application.yml指定服務端口為:

?
1
server.port=9411

4.2 創建service-hi

在其pom引入起步依賴spring-cloud-starter-zipkin,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<dependencies>
 
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
 </dependency>
 <!--compile('org.springframework.cloud:spring-cloud-starter-zipkin')-->
 
 <dependency>
  <groupid>org.springframework.cloud</groupid>
  <artifactid>spring-cloud-starter-zipkin</artifactid>
 </dependency>
 
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-test</artifactid>
  <scope>test</scope>
 </dependency>
 </dependencies>
 
 <dependencymanagement>
 <dependencies>
  <dependency>
  <groupid>org.springframework.cloud</groupid>
  <artifactid>spring-cloud-dependencies</artifactid>
  <version>dalston.rc1</version>
  <type>pom</type>
  <scope>import</scope>
  </dependency>
 </dependencies>
 </dependencymanagement>

在其配置文件application.yml指定zipkin server的地址,頭通過配置“spring.zipkin.base-url”指定:

?
1
2
3
server.port=8988
spring.zipkin.base-url=http://localhost:9411
spring.application.name=service-hi

通過引入spring-cloud-starter-zipkin依賴和設置spring.zipkin.base-url就可以了。

對外暴露接口:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@springbootapplication
@restcontroller
public class servicehiapplication {
 
 public static void main(string[] args) {
 springapplication.run(servicehiapplication.class, args);
 }
 
 private static final logger log = logger.getlogger(servicehiapplication.class.getname());
 
 
 @autowired
 private resttemplate resttemplate;
 
 @bean
 public resttemplate getresttemplate(){
 return new resttemplate();
 }
 
 @requestmapping("/hi")
 public string callhome(){
 log.log(level.info, "calling trace service-hi ");
 return resttemplate.getforobject("http://localhost:8989/miya", string.class);
 }
 @requestmapping("/info")
 public string info(){
 log.log(level.info, "calling trace service-hi ");
 
 return "i'm service-hi";
 
 }
 
 @bean
 public alwayssampler defaultsampler(){
 return new alwayssampler();
 }
}

4.3 創建service-miya

創建過程痛service-hi,引入相同的依賴,配置下spring.zipkin.base-url。

對外暴露接口:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@springbootapplication
@restcontroller
public class servicemiyaapplication {
 
 public static void main(string[] args) {
 springapplication.run(servicemiyaapplication.class, args);
 }
 
 private static final logger log = logger.getlogger(servicemiyaapplication.class.getname());
 
 
 @requestmapping("/hi")
 public string home(){
 log.log(level.info, "hi is being called");
 return "hi i'm miya!";
 }
 
 @requestmapping("/miya")
 public string info(){
 log.log(level.info, "info is being called");
 return resttemplate.getforobject("http://localhost:8988/info",string.class);
 }
 
 @autowired
 private resttemplate resttemplate;
 
 @bean
 public resttemplate getresttemplate(){
 return new resttemplate();
 }
}

4.4 啟動工程,演示追蹤

依次啟動上面的三個工程,打開瀏覽器訪問:http://localhost:9411/,會出現以下界面:

淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

訪問:http://localhost:8989/miya,瀏覽器出現:i'm service-hi

再打開http://localhost:9411/的界面,點擊dependencies,可以發現服務的依賴關系:

淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

點擊find traces,可以看到具體服務相互調用的數據:

淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

本文源碼下載: https://github.com/forezp/springcloudlearning/tree/master/chapter9

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/forezp/article/details/70162074

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性妲己 | 成人小视频在线免费观看 | 91欧美国产 | 冰雪奇缘1完整版免费观看 变形金刚第一部 | 日本网络视频www色高清免费 | 动漫美女隐私尿口图片 | 精品国产一区二区在线观看 | 国产在线视频资源 | 欧美特黄三级在线观看 | 国产青色 | 性鸥美 | 日本连裤袜xxxxx在线视频 | 美女沟厕撒尿全过程高清图片 | 6969精品视频在线观看 | 高清在线观看mv的网址免费 | 精品国产自在天天线2019 | 国产香蕉久久 | chinesehdxxx吃奶水 | 日不卡| 无限好资源第一片免费韩国 | 经典欧美gifxxoo动态图暗网 | 国语刺激对白勾搭视频在线观看 | chinese男gay飞机同志 | 欧美在线观看视频一区 | 91国语精品自产拍在线观看一 | 亚洲 欧美 国产 综合首页 | 精品国产一区二区三区久久久狼 | 男同gay玩奴男同玩奴 | 日韩经典在线观看 | 按摩师他揉我奶好爽捏我奶 | 91麻豆国产福利精品 | 亚洲精品午夜级久久久久 | 91麻豆国产 | 韩国甜性涩爱在线播放 | 娇喘高潮教室h | 亚洲精品一区二区久久久久 | 国产东北3p真实在线456视频 | 青草娱乐极品免费视频 | 50度灰破解版v5.7.0 | 91视频a| 欧美一区高清 |