SpringCloud Sleuth分布式链路跟踪

1、概述

1.1、现有问题

1.1.1、微服务框架中请求处理过程

1.1.2、造成问题

1.2、解决方法

2、实例

2.1、zipkin

2.1.1、下载

2.1.2、运行

2.1.3、运行控制台

2.2、服务提供者

2.2.1、POM文件

2.2.2、yaml配置文件

2.2.3、Controller

2.3、 服务消费者

2.3.1、POM和yaml文件同服务提供者

2.3.2、Controller

2.4、测试


1.1、现有问题

1.1.1、微服务框架中请求处理过程

  1. 客户端发起请求
  2. 后端系统中,经过多个不同的服务节点调用
  3. 产生结果

1.1.2、造成问题

每一个前端请求,会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败

1.2、解决方法

  • SpringCloud Sleuth提供了一套完整的服务跟踪的解决方案
  • 在分布式系统中提供追踪解决方案,并且兼容支持zipkin

2.1、zipkin

2.1.1、下载

2.1.2、运行

在命令行终端中输入:java -jar zipkin-server-2.12.9-exec.jar

2.1.3、运行控制台

        http://localhost:9411/zipkin

2.2、服务提供者

2.2.1、POM文件

        引入 spring-cloud-starter-zipkin 依赖

<dependency>     <groupId>org.springframework.cloud</groupId>     <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>

2.2.2、yaml配置文件

         添加zipkinsleuth属性

spring:  application:   name: cloud-payment-service #微服务名称   zipkin:    base-url: http://localhost:9411   sleuth:    sampler:     # 采样率介于0到1之间,1表示全部采样     probability: 1

2.2.3、Controller

        对外提供的服务项

@GetMapping("/payment/zipkin") public String paymentZipkin() {     return "hi, i am Zipkin"; }

2.3、 服务消费者

2.3.1、POM和yaml文件同服务提供者

2.3.2、Controller

        调用服务提供者的url

@GetMapping("/consumer/payment/zipkin") public String paymentZipkin() {     String result = restTemplate.getForObject("http://localhost:8001" + "/payment/zipkin/", String.class);     return result; }

2.4、测试

1、启动服务提供者、服务消费者

2、打开浏览器,访问http://localhost:9411

        得到微服务调用关系:

         得到依赖关系: