背景介绍
在微服务框架中,一个由客户端发起的请求,在后端系统中会经过多个不同的微服务节点调用,协同操作产生最后的请求结果。每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现 高延时 或者 错误,都会引起整个请求最后的失败。
Spring Cloud Sleuth 提供了分布式系统中一套完整的服务跟踪的解决方案,并且兼容支持了zipkin,完美的解决了多个微服务之间链路调用的问题。
环境准备
Zipkin 是 Twitter 的一个开源项目,允许开发者收集 Twitter 各个服务上的监控数据,并提供查询接口。我们需要先准备一个 Zipkin 环境。Spring Cloud 从F版起已不需要自己构建 Zipkin server了,只需要调用jar包即可。当前使用版本为 H版。我们只需要下载 Zipkin jar包,使用 java -jar xxx
的方式启动即可。
下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server
通过 http://loclahost:9411 就能进入到 Zipkin 为我们提供的可视化界面。
术语介绍
完整的调用链路:一条链路通过Trace Id唯一标识,Span标识发起的请求信息,各Span通过parent id关联起来。
Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识
span:表示调用链路来源,通俗的理解span就是一次请求信息
Sleuth测试
在 客户端(80) 调用 服务端(8001) 提供的服务,服务调用使用 openFeign
的方式。
因此我们需要在80和8001两个微服务中做以下相同的配置
<!--引入sleuth+zipkin依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
spring:
application:
name: cloud-payment-service
zipkin:
base-url: http://localhost:9411 #监控数据zipkin地址
sleuth:
sampler:
probability: 1 #采样率值介于0到1,1则表示全部采集
spring:
application:
name: cloud-order-service
zipkin:
base-url: http://localhost:9411 #监控数据zipkin地址
sleuth:
sampler:
probability: 1 #采样率值介于0到1,1则表示全部采集
我们去添加一个测试方法
在8001服务中的PaymentController
@GetMapping("/payment/zipkin")
public String paymentZipkin(){
return "Hi, i am paymentZipkin";
}
在80服务中的OrderController
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin() {
String result = restTemplate.getForObject("http://localhost:8001" + "/payment/zipkin", String.class);
return result;
}
启动7001,8001,80微服务
访问:http://localhost/consumer/payment/zipkin
多刷新几次。在zipkin界面可以看到这样的追踪记录。
点击相对应请求,还可以看到 模块间调用情况、调用耗时 等更详细的信息。点击导航栏中的 依赖 项,还可以查看模块(调用、被调用)的依赖关系等,链路调用关系一目了然。
版权属于:乐心湖's Blog
本文链接:https://xn2001.com/archives/585.html
声明:博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!