SpringCloud_Sleuth分布式链路请求跟踪的示例代码

yizhihongxing

下面是关于“SpringCloud_Sleuth分布式链路请求跟踪的示例代码”的攻略。

什么是SpringCloud_Sleuth?

SpringCloud_Sleuth是SpringCloud的一个组件,主要是用来实现分布式链路请求跟踪的。它基于Dapper的思想,通过为每个请求生成唯一的trace id和span id,来实现分布式系统中的链路跟踪。同时,它也提供了一些有用的工具,比如Zipkin,来实现链路跟踪数据的可视化和分析。

SpringCloud_Sleuth的使用

引入依赖

在使用SpringCloud_Sleuth之前,需要在pom.xml文件中引入相应的依赖。具体依赖如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

配置启动类

在启动类中可以通过设置@EnableSleuth和@EnableZipkinServer注解,来启用SpringCloud_Sleuth和Zipkin的功能。具体代码如下:

@SpringBootApplication
@EnableSleuth
@EnableZipkinServer
public class SleuthDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SleuthDemoApplication.class, args);
    }
}

配置application.yml

在application.yml文件中,需要配置一些信息,包括应用名称(spring.application.name)、Zipkin服务器的地址(spring.zipkin.base-url)、采样率(spring.sleuth.sampler.probability)等。具体配置如下:

spring:
  application:
    name: sleuth-demo
  zipkin:
    base-url: http://localhost:9411/
  sleuth:
    sampler:
      probability: 1

示例说明

下面给出两个示例说明。

示例1:单体应用

在单体应用中,我们可以使用SpringMVC来模拟一个简单的接口,并通过RestTemplate来模拟接口之间的调用关系。

@RestController
@RequestMapping
@Slf4j
public class DemoController {

    private final RestTemplate restTemplate;

    public DemoController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/hello")
    public String hello() {
        log.info("处理/hello请求");
        String result = restTemplate.getForObject("http://localhost:8080/hello2", String.class);
        log.info("请求/hello2返回结果:{}", result);
        return "hello";
    }

    @GetMapping("/hello2")
    public String hello2() {
        log.info("处理/hello2请求");
        return "hello2";
    }
}

通过上述代码,我们可以看到,在/hello接口中,我们调用了/hello2接口,并在日志中输出了请求/hello2的结果。此时,我们启动应用,并在浏览器中访问http://localhost:8080/hello的时候,可以看到在控制台中输出了以下日志信息:

2022-02-16 14:30:22.135  INFO [sleuth-demo,ef8f1de84c80d771,ef8f1de84c80d771,false] 2825 --- [nio-8080-exec-1] demo.controller.DemoController          : 处理/hello请求
2022-02-16 14:30:22.205  INFO [sleuth-demo,ef8f1de84c80d771,5f6b790a19bd4d8b,false] 2825 --- [nio-8080-exec-1] demo.controller.DemoController          : 处理/hello2请求
2022-02-16 14:30:22.209  INFO [sleuth-demo,ef8f1de84c80d771,5f6b790a19bd4d8b,false] 2825 --- [nio-8080-exec-1] demo.controller.DemoController          : 请求/hello2返回结果:hello2

从日志中可以看到,每个请求都有一个独特的trace id和span id,同时,我们在请求/hello2接口的时候,也能够看到对应的日志信息。

示例2:微服务应用

在微服务应用中,我们可以使用SpringCloud进行构建。下面是一个简单的示例:

@SpringBootApplication
@EnableDiscoveryClient
public class ProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
@RestController
@RequestMapping
@Slf4j
public class ProducerController {

    private final RestTemplate restTemplate;

    public ProducerController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/hello")
    public String hello() {
        log.info("处理/hello请求");
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> entity = new HttpEntity<>(null, headers);
        String result = restTemplate.exchange("http://consumer/hello2", HttpMethod.GET, entity, String.class).getBody();
        log.info("请求/hello2返回结果:{}", result);
        return "hello";
    }
}
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

}
@RestController
@RequestMapping
@Slf4j
public class ConsumerController {

    @GetMapping("/hello2")
    public String hello2() {
        log.info("处理/hello2请求");
        return "hello2";
    }
}

在上述示例中,我们创建了一个名为producer的服务,它的/hello接口会调用名为consumer的服务的/hello2接口。在启动服务之前,我们需要启动Zipkin服务器。然后,启动producer和consumer服务,并在浏览器中访问http://localhost:8081/hello,此时,我们可以在Zipkin的web界面中看到分布式的链路跟踪信息。

总结

通过这篇攻略,我们了解了SpringCloud_Sleuth的基本用法,以及应用在单体应用和微服务应用中的示例。同时,我们也把握了如何启用Zipkin服务器,来实现分布式链路请求跟踪的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringCloud_Sleuth分布式链路请求跟踪的示例代码 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Django JWT Token RestfulAPI用户认证详解

    Django JWT Token RestfulAPI 用户认证详解 什么是JWT? JWT(Json Web Token)是一种用于进行跨网络访问的通信协议,它拥有最重要的功能:保证其所有信息都是由可信解析方发布的。JWT由三部分组成:Header、Payload和Signature。 Header: 包含加密算法、令牌类型等。 Payload: 包含需要…

    人工智能概览 2023年5月25日
    00
  • VSCode下配置python调试运行环境的方法

    下面是详细的”VSCode下配置Python调试运行环境的方法”攻略: 1. 安装 Python 解释器 在 VSCode 之前,我们需要安装 Python 解释器。可以到 Python 官网下载。 安装好 Python 后,可以在命令行(terminal)执行以下命令来验证 Python 是否安装成功: python –version 如果出现了 Pyt…

    人工智能概览 2023年5月25日
    00
  • win10下vs2015配置Opencv3.1.0详细过程

    以下是win10下vs2015配置Opencv3.1.0详细过程: 第一步:下载安装Opencv3.1.0 1.打开Opencv官网,下载Opencv3.1.0压缩包2.解压后将文件夹重命名为“opencv-3.1.0”并放在“C:\”盘根目录下3.添加系统环境变量: 右键“计算机” >> “属性” >> “高级系统设置” >&…

    人工智能概论 2023年5月24日
    00
  • 简单了解Nginx七层负载均衡的几种调度算法

    简单了解Nginx七层负载均衡的几种调度算法 什么是七层负载均衡? 七层负载均衡是指在 OSI(开放系统互联)网络模型的第七层(应用层)上进行负载均衡,它使用应用层协议(如HTTP)来决定将请求转发到哪个服务器上。相比较传统的四层负载均衡,七层负载均衡能够更加精确地控制流量分配和应用请求的处理。 Nginx七层负载均衡几种调度算法 加权轮询(Weighted…

    人工智能概览 2023年5月25日
    00
  • 详解OpenCV和PIL读取和显示图像的差异

    我们先来介绍一下OpenCV和PIL。OpenCV是一个广泛用于计算机视觉和机器学习的开源计算机视觉库,提供了很多图像处理功能。而PIL(Python Image Library)是Python的一个图像处理库,也可以进行图像的读取、保存以及一些基本的图像处理。 在Python中读取和显示图像,我们可以使用OpenCV和PIL来实现。但是这两者的读取和显示图…

    人工智能概论 2023年5月24日
    00
  • 利用Python中的mock库对Python代码进行模拟测试

    我来为您详细讲解利用Python中的mock库对Python代码进行模拟测试的完整攻略。 什么是mock库? Mock库是Python中常用的一个模拟测试工具,用于模拟函数及调用的返回结果。它能够在测试过程中替代掉一些不容易获取的变量或对象,然后进行测试。 Mock库可以帮助我们构建一个虚拟的环境,以独立于现实环境进行测试,可以快速地进行单元测试、集成测试等…

    人工智能概论 2023年5月25日
    00
  • SpringBoot 2.5.5整合轻量级的分布式日志标记追踪神器TLog的详细过程

    SpringBoot 2.5.5整合轻量级的分布式日志标记追踪神器TLog的详细过程 什么是TLog TLog是一个开源的轻量级分布式日志标记追踪神器,它可以实时追踪分布式系统中的调用链路、对外接口的流量及性能等,并生成详细的日志和统计数据供开发人员或运维人员分析定位问题。 TLog的特点 高性能:采用ByteBuf技术,避免了反复申请和释放内存的开销,减轻…

    人工智能概览 2023年5月25日
    00
  • Django教程笔记之中间件middleware详解

    Django教程笔记之中间件Middleware详解 Django是一个广受欢迎的Web开发框架,中间件是Django框架中一个非常有用的部分。中间件在Django框架中扮演着很重要的角色,用于处理请求和响应。中间件可以保存请求和响应,在处理结束后修改它们或在它们被发送到服务器或客户端之前拦截它们。 什么是中间件Middleware? 中间件是Django框…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部