cloud sleuth
在微服务框架中,一个由客户端发起的请求在后台系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现问题都会导致整个请求失败。
大概示意图:
Trace: 类似于树结构的Span集合,表示一条调用链路,存在唯一标识
Span: 表示调用链路来源,通俗的理解span 就是一次请求信息
集成sleuth:
1.下载zipkin-server-2.12.9-exec.jar
2. 服务端与客户端都添加pom依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
完整pom依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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-zipkin</artifactId>
</dependency>
服务端与客户端yml增加依赖:
spring:
application:
name: jym-provider-order
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
# 采样率值介于 0 到 1 之间,1 则表示全部采集
probability: 1
服务与调用代码:
服务端:
@GetMapping("/zipkin")
public String paymentZipkin() {
return "hello,惊讶猫,this is zipkin callback";
}
调用端:
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin() {
return restTemplate.getForObject("http://localhost:8001/payment/zipkin",String.class);
}
测试:
java -jar zipkin-server-2.12.9-exec.jar 启动 zipkin
启动eureka,生产者与消费者,调用服务后:
点击查询,可以看到调用情况: