上一篇 :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 分布式系统中存在的问题

  • 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成─条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。

springcloud连接数 springcloud调用链路_sleuth


springcloud连接数 springcloud调用链路_springcloud连接数_02

1.2 Sleuth 简介

2. 使用

2.1 zipkin

  1. 下载 zipkin
    选择 zipkin-server-version.exec.jar
  2. 允许 zipkin
    使用 CMD 进入存放 zipkin.jar 的目录,并输入
java -jar zipkin-server-2.12.9-exec.jar

springcloud连接数 springcloud调用链路_Springcloud_03

  1. 查看仪表盘
    访问 :http://localhost:9411/zipkin/
  • 完整的调用链路

表示一条请求链路,一条链路通过 Trace ID 唯一标识,Span 标识发起的请求信息,各 Span 通过 parent id 关联起来

springcloud连接数 springcloud调用链路_spring_04

  • 上图简化
  • 名词解释
  • Trace ::类似于树结构的Span集合,表示一条调用链路,存在唯一标识
  • span :表示调用链路来源,通俗的理解span就是一次请求信息

2.2 配置服务提供者(Provider)

  • 修改 cloud-provider-payment-8002
  1. 修改 POM
<!--包含了sleuth+zipkin-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
  1. 修改 YML
zipkin:
	# zipkin 的访问地址
	base-url: http://localhost:9411
sleuth:
	sampler:
		# 采样率,这个值需要在 0-1 之间,一般 0.5
		probability: 1

springcloud连接数 springcloud调用链路_链路_05

  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
  1. 修改 POM
<!--包含了sleuth+zipkin-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
  1. 修改 YML
zipkin:
	# zipkin 的访问地址
	base-url: http://localhost:9411
sleuth:
	sampler:
		# 采样率,这个值需要在 0-1 之间,一般 0.5
		probability: 1

springcloud连接数 springcloud调用链路_sleuth_06

  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 的监控界面