上一篇 :15. 消息驱动 - SpringCloud Stream
下一篇 :17. SpringCloud Alibaba入门简介
文章目录
- 1. 概述
- 1.1 分布式系统中存在的问题
- 1.2 Sleuth 简介
- 2. 使用
- 2.1 zipkin
- 2.2 配置服务提供者(Provider)
- 2.3 配置服务消费者(Consumer)
- 2.3 测试
1. 概述
1.1 分布式系统中存在的问题
- 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成─条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。
1.2 Sleuth 简介
- 官网 :https://github.com/spring-cloud/spring-cloud-sleuth
- Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案
- 在分布式系统中提供追踪解决方案并且兼容支持了 zipkin
- 官网的流程图
2. 使用
2.1 zipkin
- SpringCloud从F版起已不需要自己构建Zipkin server了,只需要调用jar包即可
- 下载地址 :https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/如果上面那个地址下载的慢,可以试试这个 : https://search.maven.org/search?q=g:%22io.zipkin.java%22%20AND%20a:%22zipkin-server%22%20AND%20l:%22exec%22%20AND%20v:%222.12.9%22如果这个链接的版本低了,可以参考这个博客 :
- 下载 zipkin
选择 zipkin-server-version.exec.jar - 允许 zipkin
使用 CMD 进入存放 zipkin.jar 的目录,并输入
java -jar zipkin-server-2.12.9-exec.jar
- 查看仪表盘
访问 :http://localhost:9411/zipkin/
- 完整的调用链路
表示一条请求链路,一条链路通过 Trace ID 唯一标识,Span 标识发起的请求信息,各 Span 通过 parent id 关联起来
- 上图简化
- 名词解释
- Trace ::类似于树结构的Span集合,表示一条调用链路,存在唯一标识
- span :表示调用链路来源,通俗的理解span就是一次请求信息
2.2 配置服务提供者(Provider)
- 修改 cloud-provider-payment-8002
- 修改 POM
<!--包含了sleuth+zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 修改 YML
zipkin:
# zipkin 的访问地址
base-url: http://localhost:9411
sleuth:
sampler:
# 采样率,这个值需要在 0-1 之间,一般 0.5
probability: 1
- 业务类
- 修改Controller ,在最后添加一个方法
/** zipkin */
@GetMapping("/payment/zipkin")
public String paymentZipkin() {
return "hi ,i'am paymentzipkin server fall back,O(∩_∩)O哈哈~";
}
2.3 配置服务消费者(Consumer)
- 修改 cloud-consumer-order-80
- 修改 POM
<!--包含了sleuth+zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 修改 YML
zipkin:
# zipkin 的访问地址
base-url: http://localhost:9411
sleuth:
sampler:
# 采样率,这个值需要在 0-1 之间,一般 0.5
probability: 1
- 修改 Controller
// ====================> zipkin+sleuth
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin() {
String result = restTemplate.getForObject(PAYMENT_URL+"/provider/payment/zipkin/", String.class);
return result;
}
2.3 测试
- 启动以下服务
- 调用服务消费者 80 端(多请求几次) :http://localhost/consumer/payment/zipkin
- 查看 zipkin 的监控界面