日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
SpringCloud構建微服務架構:分布式服務跟蹤(入門)

Spring Cloud構建微服務架構:分布式服務跟蹤(入門)

作者:翟永超 2018-03-02 16:11:29

開發(fā)

開發(fā)工具

分布式 針對上面所述的分布式服務跟蹤問題,Spring Cloud Sleuth提供了一套完整的解決方案。在本章中,我們將詳細介紹如何使用Spring Cloud Sleuth來為我們的微服務架構增加分布式服務跟蹤的能力。

創(chuàng)新互聯公司是一家專注于成都網站設計、成都網站建設與策劃設計,鹽田網站建設哪家好?創(chuàng)新互聯公司做網站,專注于網站建設10年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:鹽田等地區(qū)。鹽田做網站價格咨詢:18980820575

通過之前的N篇博文介紹,實際上我們已經能夠通過使用它們搭建起一個基礎的微服務架構系統(tǒng)來實現我們的業(yè)務需求了。但是,隨著業(yè)務的發(fā)展,我們的系統(tǒng)規(guī)模也會變得越來越大,各微服務間的調用關系也變得越來越錯綜復雜。

通常一個由客戶端發(fā)起的請求在后端系統(tǒng)中會經過多個不同的微服務調用來協同產生***的請求結果,在復雜的微服務架構系統(tǒng)中,幾乎每一個前端請求都會形成一條復雜的分布式服務調用鏈路,在每條鏈路中任何一個依賴服務出現延遲過高或錯誤的時候都有可能引起請求***的失敗。這時候對于每個請求全鏈路調用的跟蹤就變得越來越重要,通過實現對請求調用的跟蹤可以幫助我們快速的發(fā)現錯誤根源以及監(jiān)控分析每條請求鏈路上的性能瓶頸等好處。

針對上面所述的分布式服務跟蹤問題,Spring Cloud Sleuth提供了一套完整的解決方案。在本章中,我們將詳細介紹如何使用Spring Cloud Sleuth來為我們的微服務架構增加分布式服務跟蹤的能力。

快速入門

在介紹各種概念與原理之前,我們先通過實現一個簡單的示例,對存在服務調用的應用增加一些sleuth的配置實現基本的服務跟蹤功能,以此來對Spring Cloud Sleuth有一個初步的了解,隨后再逐步展開介紹實現過程中的各個細節(jié)部分。

準備工作

在引入Sleuth之前,我們先按照之前章節(jié)學習的內容來做一些準備工作,構建一些基礎的設施和應用:

  • 服務注冊中心:eureka-server,這里不做贅述,直接使用之前構建的工程。或者直接使用我的公益eureka注冊中心,下面的例子使用該注冊中心。
  • 微服務應用:trace-1,實現一個REST接口/trace-1,調用該接口后將觸發(fā)對trace-2應用的調用。具體實現如下:
  • 創(chuàng)建一個基礎的Spring Boot應用,在pom.xml中增加下面依賴:
  
 
 
  1.  
  2.     org.springframework.boot 
  3.     spring-boot-starter-parent 
  4.     1.5.10.RELEASE 
  5.       
  6.  
  7.  
  8.     org.springframework.boot 
  9.     spring-boot-starter-web 
  10.  
  11.  
  12.     org.springframework.cloud 
  13.     spring-cloud-starter-eureka 
  14.  
  15.  
  16.     org.springframework.cloud 
  17.     spring-cloud-starter-ribbon 
  18.  
  19.  
  20.      
  21.          
  22.             org.springframework.cloud 
  23.             spring-cloud-dependencies 
  24.             Dalston.SR5 
  25.             pom 
  26.             import 
  27.          
  28.      
  29.  
  • 創(chuàng)建應用主類,并實現/trace-1接口,并使用RestTemplate調用trace-2應用的接口。具體如下:
  
 
 
  1. @RestController 
  2. @EnableDiscoveryClient 
  3. @SpringBootApplication 
  4. public class TraceApplication { 
  5.  
  6.     private final Logger logger = Logger.getLogger(getClass()); 
  7.  
  8.     @Bean 
  9.     @LoadBalanced 
  10.     RestTemplate restTemplate() { 
  11.         return new RestTemplate(); 
  12.     } 
  13.  
  14.     @RequestMapping(value = "/trace-1", method = RequestMethod.GET) 
  15.     public String trace() { 
  16.         logger.info("===call trace-1==="); 
  17.         return restTemplate().getForEntity("http://trace-2/trace-2", String.class).getBody(); 
  18.     } 
  19.  
  20.     public static void main(String[] args) { 
  21.         SpringApplication.run(TraceApplication.class, args); 
  22.     } 
  23.  
  • application.properties中將eureka.client.serviceUrl.defaultZone參數指向eureka-server的地址,具體如下:
  
 
 
  1. spring.application.name=trace-1 
  2. server.port=9101 
  3.  
  4. eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/ 
  • 微服務應用:trace-2,實現一個REST接口/trace-2,供trace-1調用。具體實現如下:
  • 創(chuàng)建一個基礎的Spring Boot應用,pom.xml中的依賴與trace-1相同
  • 創(chuàng)建應用主類,并實現/trace-2接口,具體實現如下:
  
 
 
  1. @RestController 
  2. @EnableDiscoveryClient 
  3. @SpringBootApplication 
  4. public class TraceApplication { 
  5.  
  6.     private final Logger logger = Logger.getLogger(getClass()); 
  7.  
  8.     @RequestMapping(value = "/trace-2", method = RequestMethod.GET) 
  9.     public String trace() { 
  10.         logger.info("======"); 
  11.         return "Trace"; 
  12.     } 
  13.  
  14.     public static void main(String[] args) { 
  15.         SpringApplication.run(TraceApplication.class, args); 
  16.     } 
  17.  
  • application.properties中將eureka.client.serviceUrl.defaultZone參數指向eureka-server的地址,另外還需要設置不同的應用名和端口號,具體如下:
  
 
 
  1. spring.application.name=trace-2 
  2. server.port=9102 
  3. eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/ 

在實現了上面內容之后,我們可以將eureka-server、trace-1、trace-2三個應用都啟動起來,并通過postman或curl等工具來對trace-1的接口發(fā)送請求http://localhost:9101/trace-1,我們可以得到返回值Trace,同時還能在它們的控制臺中分別獲得下面的輸出:

  
 
 
  1. -- trace-1 
  2. INFO 25272 --- [nio-9101-exec-2] ication$$EnhancerBySpringCGLIB$$36e12c68 : ====== 
  3.  
  4. -- trace-2 
  5. INFO 7136 --- [nio-9102-exec-1] ication$$EnhancerBySpringCGLIB$$52a02f0b : ====== 

實現跟蹤

在完成了準備工作之后,接下來我們開始進行本章的主題內容,為上面的trace-1和trace-2來添加服務跟蹤功能。通過Spring Cloud Sleuth的封裝,我們?yōu)閼迷黾臃崭櫮芰Φ牟僮鞣浅:唵?,只需要在trace-1和trace-2的pom.xml依賴管理中增加spring-cloud-starter-sleuth依賴即可,具體如下:

  
 
 
  1.  
  2.     org.springframework.cloud 
  3.     spring-cloud-starter-sleuth 
  4.  

到這里,實際上我們已經為trace-1和trace-2實現服務跟蹤做好了基礎的準備,重啟trace-1和trace-2后,再對trace-1的接口發(fā)送請求http://localhost:9101/trace-1。此時,我們可以從它們的控制臺輸出中,窺探到sleuth的一些端倪。

  
 
 
  1. -- trace-1 
  2. INFO [trace-1,f410ab57afd5c145,a9f2118fa2019684,false] 25028 --- [nio-9101-exec-1] ication$$EnhancerBySpringCGLIB$$d8228493 : ====== 
  3.  
  4. -- trace-2 
  5. INFO [trace-2,f410ab57afd5c145,e9a377dc2268bc29,false] 23112 --- [nio-9102-exec-1] ication$$EnhancerBySpringCGLIB$$e6cb4078 : ====== 

從上面的控制臺輸出內容中,我們可以看到多了一些形如[trace-1,f410ab57afd5c145,a9f2118fa2019684,false]的日志信息,而這些元素正是實現分布式服務跟蹤的重要組成部分,它們每個值的含義如下:

  • ***個值:trace-1,它記錄了應用的名稱,也就是application.properties中spring.application.name參數配置的屬性。
  • 第二個值:f410ab57afd5c145,Spring Cloud Sleuth生成的一個ID,稱為Trace ID,它用來標識一條請求鏈路。一條請求鏈路中包含一個Trace ID,多個Span ID。
  • 第三個值:a9f2118fa2019684,Spring Cloud Sleuth生成的另外一個ID,稱為Span ID,它表示一個基本的工作單元,比如:發(fā)送一個HTTP請求。
  • 第四個值:false,表示是否要將該信息輸出到Zipkin等服務中來收集和展示。

上面四個值中的Trace ID和Span ID是Spring Cloud Sleuth實現分布式服務跟蹤的核心。在一次服務請求鏈路的調用過程中,會保持并傳遞同一個Trace ID,從而將整個分布于不同微服務進程中的請求跟蹤信息串聯起來,以上面輸出內容為例,trace-1和trace-2同屬于一個前端服務請求來源,所以他們的Trace ID是相同的,處于同一條請求鏈路中。

本文完整示例:

讀者可以根據喜好選擇下面的兩個倉庫中查看trace-1和trace-2兩個項目:

Github

Gitee

【本文為51CTO專欄作者“翟永超”的原創(chuàng)稿件,轉載請通過51CTO聯系作者獲取授權】

戳這里,看該作者更多好文


分享題目:SpringCloud構建微服務架構:分布式服務跟蹤(入門)
當前地址:http://m.5511xx.com/article/ccdijdg.html