《springcloud — Finchley.RELEASE版》第八篇 服務鏈路追蹤Sleuth
阿新 • • 發佈:2019-01-02
Sleuth簡述
微服務架構是通過業務來劃分服務的,對外暴露的介面,可能需要很多個服務協同才能完成一個介面功能,如果鏈路上任何一個服務出現問題,都會形成導致介面呼叫失敗。此時查找出現問題的微服務是很困難的。Spring Cloud Sleuth主要功能就是在分散式系統中提供追蹤解決方案,並且相容支援了zipkin。
Sleuth Server
下載完成jar 包之後,需要執行jar,java -jar zipkin-server-2.10.1-exec.jar
1.構建一個服務提供者
在micro-parent下新建module,micro-zipkin-client,新增zipkin等相關依賴,pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>micro-zuul-client</artifactId> <packaging>jar</packaging> <name>micro-zuul-client</name> <description>微服務實戰</description> <parent> <groupId>com.sun</groupId> <artifactId>micro-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> </project>
配置檔案:
server:
port: 7091
spring:
application:
name: micro-zipkin-client
zipkin:
base-url: http://localhost:9411 #zipkin服務地址
eureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka
啟動類,提供一個對外方法:
package com.sun.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class ZipkinApplication { public static void main(String[] args) { SpringApplication.run(ZipkinApplication.class, args); } @RequestMapping("/hello") public String hello(){ return "hello"; } }
2.構建一個服務消費者
在micro-parent下新建module,micro-zipkin-server,新增zipkin等相關依賴,pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>micro-zipkin-server</artifactId>
<packaging>jar</packaging>
<name>micro-zipkin-server</name>
<description>微服務實戰</description>
<parent>
<groupId>com.sun</groupId>
<artifactId>micro-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
</dependencies>
</project>
配置檔案:
spring:
zipkin:
base-url: http://localhost:9411 #zipkin服務端
application:
name: micro-zipkin-client
server:
port: 7090
eureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka
啟動類:
package com.sun.eureka;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@RestController
public class BusApplication {
public static void main(String[] args) {
SpringApplication.run(BusApplication.class, args);
}
@Autowired
private RestTemplate restTemplate;
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@RequestMapping("/hi")
public String callHome(){
return restTemplate.getForObject("http://MICRO-ZIPKIN-CLIENT/hello", String.class);
}
}
啟動mirco-eureka-server,mirco-zipkin-server,mirco-zipkin-client;訪問http://localhost:7090/hi顯示:
從服務名裡可以看到mirco-zipkin-server,mirco-zipkin-client服務,點選find traces,可以看到具體服務相互呼叫的資料
再點選服務可以看到詳細資訊:
點選依賴分析可以看到服務依賴關係:
原始碼地址: