1. 程式人生 > >《springcloud — Finchley.RELEASE版》第八篇 服務鏈路追蹤Sleuth

《springcloud — Finchley.RELEASE版》第八篇 服務鏈路追蹤Sleuth

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,可以看到具體服務相互呼叫的資料

再點選服務可以看到詳細資訊:

點選依賴分析可以看到服務依賴關係:

原始碼地址: