Spring Cloud Sleuth介绍以及简单示例

news2024/9/20 18:50:23

文章目录

  • 什么是Spring Cloud Sleuth
  • Spring Cloud Sleuth的底层使用和实现原理
  • 如何使用Spring Cloud Sleuth
    • 添加依赖
    • 添加配置
  • 注意事项
  • Spring Cloud Sleuth的高级用法
    • 采样率设置
    • 日志格式设置
    • 自定义Trace和Span生成器
    • 配置Span收集器
  • 简单实现
    • controller层
    • 启动类
    • 配置类
    • 自定义逻辑生成类
  • 总结
    • 参考文献

什么是Spring Cloud Sleuth

Spring Cloud Sleuth是一个分布式追踪系统,用于在分布式系统中跟踪和解决请求的性能问题。它提供了一套API和工具,帮助开发人员在微服务架构中跟踪请求的流程,并可以追踪请求在不同微服务之间的传递。

Spring Cloud Sleuth通过在请求的不同环节中添加唯一的标识符,称为Trace ID和Span ID,来追踪请求的路径和性能。Trace ID是整个请求的唯一标识符,Span ID是每个环节中的唯一标识符。通过这些标识符,开发人员可以分析请求的流程和性能瓶颈,并进行优化。

Spring Cloud Sleuth的底层使用和实现原理

Spring Cloud Sleuth底层使用了AspectJ和AOP(面向切面编程)技术来实现请求的追踪。它通过切面注入,在请求的不同环节中自动创建和传递Trace ID和Span ID,实现请求的跟踪和追踪。它还利用了Spring Cloud的其他组件,如Spring Cloud Config和Spring Cloud Eureka,来实现微服务之间的协同工作。

底层实现原理如下:

  1. 在请求进入微服务的入口处,通过AspectJ注入代码,创建一个唯一的Trace ID,并将其存储在请求的Header中。
  2. 在请求的不同环节中,通过AspectJ注入代码,创建一个唯一的Span ID,并将其存储在请求的Header中。
  3. 在微服务之间进行调用时,将Trace ID和Span ID传递给下一个微服务,并在下一个微服务中创建新的Span ID。
  4. 在请求离开微服务的出口处,通过AspectJ注入代码,记录请求的性能信息,并将Trace ID和Span ID传递给下一个微服务或调用方。
  5. 在调用方接收到响应后,通过AspectJ注入代码,记录响应的性能信息,并将Trace ID和Span ID传递给下一个微服务或调用方。

如何使用Spring Cloud Sleuth

使用Spring Cloud Sleuth非常简单,只需要在项目中添加相应的依赖,并在配置文件中配置相关参数即可。

添加依赖

首先,在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

添加配置

然后,在配置文件中添加以下配置:

spring:
  sleuth:
    enabled: true

配置完成后,Spring Cloud Sleuth会自动为每个请求生成唯一的Trace ID和Span ID,并在请求的不同环节中自动传递。

注意事项

使用Spring Cloud Sleuth时,需要注意以下几点:

  1. 确保所有微服务都添加了Spring Cloud Sleuth的依赖,并配置了相同的Trace ID和Span ID。
  2. 需要注意微服务之间的调用关系,确保在调用方将Trace ID和Span ID传递给被调用方,并在被调用方正确接收和处理这些信息。
  3. 需要适当地配置日志输出,以便在日志中查看请求的Trace ID和Span ID,以及相关的性能信息。
  4. 如果需要自定义Trace ID和Span ID的生成方式,可以实现自定义的Trace和Span生成器,并在配置文件中配置使用自定义生成器。

Spring Cloud Sleuth的高级用法

除了基本的请求追踪功能,Spring Cloud Sleuth还提供了一些高级用法,以满足不同的需求。 如设置采样率、设置日志格式等。可以通过配置文件或编程方式进行配置。

采样率设置

通过设置采样率,可以控制哪些请求需要进行追踪。可以配置全局的采样率,也可以为特定的请求设置不同的采样率。

spring:
  sleuth:
    sampler:
      probability: 0.5

日志格式设置

可以配置请求追踪信息的日志格式,以便更好地查看和分析。可以选择使用简单格式或详细格式。

spring:
  sleuth:
    log:
      slf4j:
        format: %X{X-B3-TraceId} %X{X-B3-SpanId} [%X{X-Span-Export}]

自定义Trace和Span生成器

可以实现自定义的Trace和Span生成器,以满足特定的需求。

@Configuration
public class MySleuthConfig {

    @Bean
    public Sampler defaultSampler() {
        return Sampler.ALWAYS_SAMPLE;
    }

    @Bean
    public TraceIdGenerator traceIdGenerator() {
        return new MyTraceIdGenerator();
    }

    @Bean
    public SpanIdGenerator spanIdGenerator() {
        return new MySpanIdGenerator();
    }
}

配置Span收集器

可以配置将Span信息发送到特定的收集器,以便进行分析和展示。可以选择使用Zipkin等分布式追踪系统作为收集器。

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

通过以上高级用法,开发人员可以根据实际需求,灵活地配置和使用Spring Cloud Sleuth。

简单实现

下面是一个示例代码,演示了如何使用Spring Cloud Sleuth来追踪请求。

controller层

我们创建了一个HelloController,其中包含了两个接口:/hello和/hello-chain。/hello接口直接返回字符串,而/hello-chain接口调用了另一个微服务的/hello接口,并将其返回值作为响应返回。

@RestController
public class HelloController {

    private static final Logger LOGGER = LoggerFactory.getLogger(HelloController.class);

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String hello() {
        LOGGER.info("HelloController: hello");
        return "Hello from HelloController";
    }

    @GetMapping("/hello-chain")
    public String helloChain() {
        LOGGER.info("HelloController: helloChain");
        String response = restTemplate.getForObject("http://localhost:8081/hello", String.class);
        return "Hello from HelloController, response: " + response;
    }
}

启动类

我们在Application类上添加了@EnableEurekaClient和@EnableFeignClients注解,以启用Eureka客户端和Feign客户端。

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

配置类

在MySleuthConfig类中,我们实现了自定义的Trace和Span生成器,并通过@Bean注解将它们添加到Spring容器中。

@Configuration
public class MySleuthConfig {

    @Bean
    public Sampler defaultSampler() {
        return Sampler.ALWAYS_SAMPLE;
    }

    @Bean
    public TraceIdGenerator traceIdGenerator() {
        return new MyTraceIdGenerator();
    }

    @Bean
    public SpanIdGenerator spanIdGenerator() {
        return new MySpanIdGenerator();
    }
}

自定义逻辑生成类

@Component
public class MyTraceIdGenerator implements TraceIdGenerator {

    @Override
    public String generateTraceId() {
        // 自定义Trace ID生成逻辑
        return "my-trace-id";
    }
}

@Component
public class MySpanIdGenerator implements SpanIdGenerator {

    @Override
    public String generateSpanId() {
        // 自定义Span ID生成逻辑
        return "my-span-id";
    }
}

通过以上示例代码,我们可以使用Spring Cloud Sleuth来追踪请求,在分布式系统中进行性能分析和优化。

总结

文章内容较多,但具体并不复杂,希望以上内容对您有帮助!

参考文献

  1. Spring Cloud Sleuth官方文档:这是Spring Cloud Sleuth的官方文档,包含了详细的使用指南、配置说明和示例代码。

  2. Spring Cloud Sleuth GitHub仓库:这是Spring Cloud Sleuth的GitHub仓库,您可以在此处找到源代码、发布版本和问题跟踪。

  3. Spring Cloud Sleuth示例应用:这是一个包含了多个使用Spring Cloud Sleuth的示例应用的GitHub仓库,您可以参考这些示例来学习如何在不同场景下使用Spring Cloud Sleuth。

  4. Spring Cloud Sleuth视频教程:这是一系列关于Spring Cloud Sleuth的视频教程,涵盖了基本概念、使用方法和实际应用场景。

  5. Spring Cloud Sleuth博客文章:这是Spring官方博客中关于Spring Cloud Sleuth的一些文章,包含了一些实用的技巧和最佳实践。

大家是否遇到类似问题,欢迎评论区讨论,如有错误之处,敬请留言!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1123034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无氢氟蚀刻剂中钛选择性湿蚀刻铜的研究

引言 众所周知&#xff0c;微尺度和纳米尺度的地形结构对真核细胞和原核细胞的行为都有显著的影响。例如&#xff0c;具有特殊尺寸的纳米线、纳米柱、纳米管已被证明具有抗菌性能。开发这种结构提供了一种无药物的方法来对抗感染&#xff0c;这被认为是一种替代释放抗菌剂的常…

contenteditable实现文本内容确认提示

功能需求&#xff1a; 列表进行批量查询&#xff0c;需要对输入的值做提交校验&#xff0c;分三种情况&#xff1a; 若部分字符串有误&#xff0c;部分字符串需要变更字体颜色做提示&#xff0c;再次点击确认则对部分正确数据执行批量查询 若全部数据有误则变更字体颜色做提示&…

基于OpenCV批量分片高像素影像

基于OpenCV批量分片高像素影像 为了更加精确的诊断和治疗&#xff0c;医疗影像往往是大像素&#xff08;1920x1080&#xff09;或超大像素图像&#xff08;4k图像4096x2160&#xff09;。这类图像的尺寸与深度学习实验数据常见尺寸&#xff08;227x227&#xff0c;或32x32&…

Inbound marketing | LTD入站营销是对Hubspot集客营销的升级

你如何理解Inbound marketing&#xff1f; 你如何理解Inbound marketing。 集客营销抑或是入站营销。 2006年&#xff0c;MIT的在校学生BrianHalligan和DharmeshShah&#xff08;hubspot的创始人&#xff09;首次提出Inbound marketing&#xff0c;有别于推广式营销的一种全…

【已解决】Vue项目中Vite以及Webpack代码混淆处理

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域优质作者、阿里云专家博主&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4e2; 资料领取&#xff1a;前端…

触发点击事件,标签高亮显示

文章目录 &#x1f380;前言&#xff1a;&#x1f3e8;技术选型&#xff1a;vue中v-bind、v-for、的使用以及三目表达式操作步骤&#xff1a;标签动态属性响应函数标签样式 &#x1f380;前言&#xff1a; 我们经常在点击菜单时&#xff0c;会有颜色高亮显示(以红色为例)。在点…

看来直播带货不会被取消了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 这个月大家一直都在讨论印尼关闭电商直播&#xff0c;争论国内是否应该关闭直播电商&#xff0c;而且讨论的愈演愈烈&#xff0c;卢松松也发布了很多相关的信息和言论。 结果10月20日&#xff0c;…

Microsoft Edge浏览器中使用免费的ChatGPT

一、双击打开浏览器 找到&#xff1a;扩展&#xff0c;打开 二、打开Microsoft Edge加载项 三、Move tab新标签 获取免费ChatGPT 四、启用Move tab。启用ChatGPT。 扩展 管理扩展 启用 五、新建标签页&#xff0c;使用GPT 六、使用举例 提问 GPT回复

因为做了这样的项目,成为了offer收割机!

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 文章目录 一、项目视图二、学习路线1. 实习生2. 校招生3. 社招生 四、目标路径五、项目组合 注意&#xff1a;小傅哥的星球&…

紫光同创FPGA实现HSSTLP高速接口视频传输,8b/10b编解码,OV5640采集,提供PDS工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、设计思路框架设计框图OV5640摄像头配置及采集视频数据封装按键选择HSSTLP高速收发器详解HSSTLP基本了解HSSTLP之时钟HSSTLP之PCSHSSTLP之PMAHSSTLP之接口说明硬件设计HSSTLP IP调用和配置 SFP连接方案选择视频数据…

(免费领源码)hadoop#Mysql离线与实时的离线与实时的电影推荐系统10338-计算机毕业设计项目选题推荐

摘 要 随着互联网与移动互联网迅速普及&#xff0c;网络上的电影娱乐信息数量相当庞大&#xff0c;人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的离线与实时的电影推荐系统 成为一个热门。然而电影信息的表示相当复杂&#xff0c;己有的相似度计算方法与推荐算法都各…

支持语音与视频即时通讯项目杂记(二)

目录 概念&#xff1a; 视频帧&#xff08;Video Frame&#xff09;是组成视频的基本单元。它可以被视为一幅静止的图像&#xff0c;它在一定的时间间隔内连续播放&#xff0c;从而形成了流畅的视频。 Changes to Qt Multimedia New features in Qt 6 Removed features C…

【具身智能模型2】RT-1: Robotics Transformer for Real-World Control at Scale

论文标题&#xff1a;RT-1: Robotics Transformer for Real-World Control at Scale 论文作者&#xff1a;Anthony Brohan, Noah Brown, Justice Carbajal, Yevgen Chebotar, Joseph Dabis, Chelsea Finn, Keerthana Gopalakrishnan, Karol Hausman, Alex Herzog, Jasmine Hsu,…

如何处理前端打包体积过大的问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

如何使用前端桌面应用程序框架(Electron等)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

STM32实现USB转TTL串口工具

STM32实现USB转TTL串口工具 具有USB接口和UART接口的STM32芯片&#xff0c;如STM32F1, STM32F4等等&#xff0c;都可以实现USB转TTL串口工具的制作。目前具有USB接口的最小资源的芯片是STM32F103C6T6。这里介绍USB转UART的代码设计。 STM32例化的USB VCOM&#xff0c;数据通讯…

(1)(1.1) Bluetooth

文章目录 前言 1 连接到自动驾驶仪 2 连接Mission Planner快速入门 3 与Mission Planner的详细连接 4 从安卓地面站连接 5 如何更改波特率、设备名称和设备密码 6 故障排除 7 产品规格 前言 蓝牙数据链路&#xff08;如 HC-06 模块&#xff09;(HC-06 module)可用于将…

Node.JS---npm相关

文章目录 前言一、package.json配置项version&#xff1a;1.0.0devDependenciesdependenciespeerDependenciesoptionalDependencies 二、npm命令1、npm config listxmzs使用2、npm installpackage-lock.json作用 3、npm run4、 查看全局安装的可执行文件 npm生命周期npxnpx简介…

对象属性的读写两种方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对象属性的读写 两种方法 选择题 下列代码执行输出的结果是? class C(object): name hello c1 C() print("【执行】c1C()") print("【显示】print(c1.name)") print(c…

伽马函数:将阶乘函数扩展到正整数之外

一、说明 &#xff0c;是对阶乘这种运算的实数域拓展。属于高级的数学模型&#xff0c;在高级概率模型用于定义分布函数。本文将介绍这个函数的基础概念和属性。 二、gamma函数定义 众所周知&#xff0c;阶乘这个运算本来是用于简化形如 n(n−1)(n−2)…321 的乘积的&#xff0…