前言
随着分布式微服务系统的不断发展,系统中的服务调用会越来越复杂,服务调用的链路会更长,为了方便查看服务链路中的调用,获取链路调用每个节点的信息(比如响应时间之类的)就需要对服务的链路调用进行追踪。
一、sleuth是什么?
sleuth就是为了提供在微服务系统中对调用的链路进行追踪,并获取相应的信息,用户可视化的方式展现出来。主要作用就是一下四个方面
上图来源
https://www.cnblogs.com/dengpengbo/p/11109254.html
.
二、使用步骤
spring cloud sleuth整合了zipkin,其实sleuth的链路追踪就是zipkin。
以下时zipkin的官网说明,zipkin就是解决了分布式系统的链路追踪。
1.下载zipkin
链接:
下载地址
.
下载完成之后是zipkin-server-2.12.9-exec.jar的jar包
打开命令提示框输入(需要jdk1.8)
出现以下画面。说明启动成功
2.pom引入
此次准备用一个注册中心,一个调用方,一个提供方,一共三个微服务进行学习演示。
链接:
注册中心如何搭建?点击这里
.
在剩下的两个微服务中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
3.yml配置
spring:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
#采样率介于0到1之间,1表示全部采集。
probability: 1
4.controller
调用方controller:
@GetMapping("/getPayment/{id}")
public CommonResult<Payment> getPayment(@PathVariable("id") String id){
log.info("查询PayMent信息");
CommonResult<Payment> result =restTemplate.getForObject(serviceInstance.getUri()+"/payment/getOneById/"+id,CommonResult.class);
log.info("返回结果:"+result.getMessage());
return result;
}
提供方controller:
@GetMapping("/getOneById/{id}")
public CommonResult getOneById(@PathVariable("id")String id){
Payment payment = paymentService.getById(id);
log.info("根据Id获取订单信息:"+ JSON.toJSONString(payment));
return new CommonResult(200,"获取成功"+port,payment);
}
5.测试
调用方发起请求:
zipkin 出现以下界面
红框是请求的链路追踪的信息。点击出现以下画面
可以查看到服务之间的调用时间,服务个数,调用深度,span的个数。
span:表示的其中链路调用的信息记录。里面包括,父级服务调用id,此服务自身的调用Id,耗时等之类的信息。
三、总结
此篇文章是springcloud的组件学习的个人见解,欢迎大家指正,交流。