SpringCloud学习(二十二):Sleuth分布式请求链路跟踪

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

一、概述


     

1、为什么需要Sleuth

   

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


2、Sleuth是什么


Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案 。


在分布式系统中提供追踪解决方案并且兼容支持了zipkin。


二、搭建链路监控



1、下载zipkin


SpringCloud从F版起已不需要自己构建Zipkin Server了,只需调用jar包即可 。


下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/


如果forbidden就换这个:Central Repository: io/zipkin/zipkin-server  


7a491797169d46aaa6f088344ebb190b.png


下载后缀为jar的。

 

2、运行jar包


命令为

java -jar

5023e4239ac64792abc4ef2d528b82b1.png


3、访问可视化界面


http://localhost:9411/zipkin/


b6858b89f9454ac0b278e6ee42b6b0c3.png

在这个界面中我们可以看到完整的微服务调用链路


类似下图

29b70a7431164387bf933a1a1e8ceaf1.png


4、两个术语


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

d6b4a30d53784759a173ba961f5965ae.png

f225bc141a9f4239b5f7d1e7dfbc6b08.png


(1)Trace


Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识


(2)Span


span:表示调用链路来源,通俗的理解span就是一次请求信息


三、服务提供者和消费者搭建



为了方便,我们就不再新建模块了,直接在之前写好的服务提供者8001(cloud-provider-payment8001)和服务调用者80(cloud-consumer-order80)的基础上进行修改。


80和8001要修改的内容相同。


1、pom文件修改


增加zipkin的依赖

<!--包含了sleuth+zipkin-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>


2、yml文件修改


zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1


注意缩进关系

3b16c1be0b0f4793b926d6e0e67b6633.png


3、controller类修改

 

// ====================> zipkin+sleuth
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin()
{
    String result = restTemplate.getForObject("http://localhost:8001"+"/payment/zipkin/", String.class);
    return result;
}


四、运行测试



依次启动eureka7001、8001、80。  


访问         http://localhost:90//consumer/payment/zipkin 如果启动时报500错误,则将80中配置的负载均衡注解去掉(我也不知道为什么,如果有大佬知道的话麻烦评论区教教我)

13e92fdc3a5f47be83c0b4150082eacb.png

多刷新几次,模拟80调用了几次8001。


然后访问        http://localhost:9411  


选好后,点击查找 6683a850bd5844b9b1bbac02052c0812.png


点击依赖也可以清楚地看到链路的调用关系


2f2ba2e153c54f43a686f3f50a9297fa.png


相关文章
|
3月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
200 0
|
1月前
|
存储 调度 文件存储
分布式锁设计问题之当发生节点重启时发往该节点的请求会如何解决
分布式锁设计问题之当发生节点重启时发往该节点的请求会如何解决
|
1月前
分布式锁设计问题之节点A向节点C发起对R1的加锁请求如何解决
分布式锁设计问题之节点A向节点C发起对R1的加锁请求如何解决
|
3月前
|
JSON Java 程序员
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(2)
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(2)
41 3
|
3月前
|
程序员 测试技术 Docker
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(1)
294 1
|
3月前
|
SQL Java 程序员
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(1)
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(1)
175 1
|
3月前
|
缓存 负载均衡 算法
技术笔记:springcloud深入学习(四)
技术笔记:springcloud深入学习(四)
|
3月前
|
关系型数据库 MySQL Shell
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
165 0
|
3月前
|
Java 程序员 Docker
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(上)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(上)
129 0
|
3月前
|
负载均衡 NoSQL 关系型数据库
Redis分布式锁学习总结
Redis分布式锁学习总结
27 0