
SpringCloud Sleuth 分布式請求鍊路跟蹤
概述
為什麼會出現這個技術?需要解決哪些問題?
在微服務架構中,一個由用戶端發起的請求在後端系統中會經過多個不同的的服務節點調用來協同産生最後的請求結果,每一個前段請求都會形成一條複雜的分布式服務調用鍊路,鍊路中的任何一環出現高延時或錯誤都會引起整個請求最後的失敗

Spring Cloud Sleuth提供了一套完整的服務跟蹤的解決方案,在分布式系統中提供追蹤解決方案并且相容支援了zipkin
官方位址:https://spring.io/projects/spring-cloud-sleuth
搭建鍊路監控
zipkin
在 SpringCloud F版後,不需要再建立Zipkin Server了,隻需要調用 jar 包就行了
下載下傳位址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
運作 jar 包
$ java -jar zipkin-server-2.12.9-exec.jar
運作控制台
位址:http://localhost:9411/zipkin/
一條鍊路通過 Trace Id 唯一辨別,Span 辨別發起的請求資訊,各 Span 通過 parent id 關聯起來
Trace:類似于樹結構的Span集合,表示一條調用鍊路,存在唯一辨別
span:表示調用鍊路來源,通俗的了解span就是一次請求資訊
提供者
- 添加 pom 依賴
<!-- spring-cloud-starter-zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 修改 yml 配置
spring:
application:
name: provider-payment-service
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
# 采樣率值介于到1之間,1則表示全部采集
probability: 1
- 業務類測試
@RestController
public class PaymentController {
@GetMapping("/payment/zipkin")
public String paymentZipkin(){
return "鍊路測試";
}
}
消費者
- 添加 pom 依賴
<!-- spring-cloud-starter-zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 修改 yml 配置
spring:
application:
name: consumer-payment-service
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
# 采樣率值介于到1之間,1則表示全部采集
probability: 1
- 業務類測試
@RestController
@Slf4j
public class OrderController {
public final static String PAYMENT_URL = "http://PROVIDER-PAYMENT-SERVICE";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin(){
String result = restTemplate.getForObject(PAYMENT_URL + "/payment/zipkin",String.class);
return result;
}
}
打開 zipkin 監控台,就可以選擇服務,進行查找