# Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪?

这篇具有很好参考价值的文章主要介绍了# Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪?

在微服务架构中,通常会有多个服务相互协作,为了方便排查问题,我们需要对服务之间的调用进行跟踪。Spring Cloud Sleuth 是 Spring Cloud 生态中的分布式跟踪解决方案,它可以帮助我们追踪请求在微服务系统中的传递路径,以及记录每个服务的处理时间等信息。

本文将介绍如何在 Spring Boot 中使用 Spring Cloud Sleuth 来实现分布式跟踪。我们将使用 Zipkin 作为跟踪数据的存储和展示工具,并通过一个简单的示例来演示 Spring Cloud Sleuth 的使用。

# Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪?

准备工作

在开始本文之前,我们需要先准备以下环境:

  • JDK 8 或以上版本
  • Maven 3.2 或以上版本
  • Zipkin Server

本文将使用 Spring Boot 2.5.1 和 Spring Cloud 2020.0.3 版本。

创建 Spring Boot 项目

首先,我们需要创建一个新的 Spring Boot 项目。可以使用 Spring Initializr 来快速创建项目,也可以手动创建项目。

使用 Spring Initializr 创建项目

访问 https://start.spring.io/,选择需要的配置项,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZcZ10WlW-1684986080957)(null)]

然后点击 Generate 按钮,下载生成的项目压缩包。

手动创建项目

在本地创建一个空文件夹,然后在命令行中进入该文件夹,执行以下命令:

$ mkdir spring-cloud-sleuth-demo
$ cd spring-cloud-sleuth-demo
$ mkdir -p src/main/java/com/example/demo
$ mkdir -p src/main/resources
$ touch src/main/java/com/example/demo/DemoApplication.java
$ touch src/main/resources/application.properties

然后在 DemoApplication.java 文件中添加以下代码:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

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

}

application.properties 文件中添加以下配置:

spring.application.name=spring-cloud-sleuth-demo
server.port=8080

这里我们创建了一个名为 spring-cloud-sleuth-demo 的 Spring Boot 应用程序,并设置了应用程序的名称和端口号。

添加 Spring Cloud Sleuth 依赖

要使用 Spring Cloud Sleuth,我们需要在项目中添加以下依赖:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2020.0.3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

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

这里使用了 Spring Cloud 的依赖管理,以及 Spring Cloud Sleuth 的启动器依赖。

配置 Zipkin Server

Zipkin 是一个分布式跟踪系统,它可以显示跨多个服务的请求的跟踪信息。我们需要配置 Zipkin Server,以便在本地环境中使用它来存储和展示跟踪数据。

下载 Zipkin Server

首先,我们需要下载 Zipkin Server。可以从 https://zipkin.io/pages/quickstart.html 下载 Zipkin Server 的最新版。也可以使用以下命令下载和启动 Zipkin Server:

$ curl -sSL https://zipkin.io/quickstart.sh | bash -s
$ java -jar zipkin.jar

执行以上命令后,Zipkin Server 将启动在默认端口 9411 上。

配置 Spring Cloud Sleuth

要使用 Spring Cloud Sleuth,我们需要在 Spring Boot 应用程序的配置文件中添加以下配置:

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

这里设置了采样率为 1.0,表示对所有的请求都进行采样。同时,指定了 Zipkin Server 的地址,以便将跟踪数据发送到 Zipkin Server。

编写示例代码

在本文中,我们将创建两个微服务,一个是 hello-service,另一个是 world-servicehello-service 会调用 world-service,并在调用结束后返回结果。

创建 hello-service

创建一个名为 hello-service 的 Spring Boot应用程序。在 pom.xml 文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

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

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

这里除了 Spring Cloud Sleuth 的依赖之外,还添加了 OpenFeign 的依赖,以便调用 world-service

application.properties 文件中添加以下配置:

spring.application.name=hello-service
server.port=8081

然后创建一个名为 Greeting 的类,用于表示返回的结果:

public class Greeting {
    private String message;

    public Greeting() {
    }

    public Greeting(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

接下来创建一个名为 HelloController 的类,用于接收请求并调用 world-service

@RestController
public class HelloController {

    @Autowired
    private WorldClient worldClient;

    @GetMapping("/hello")
    public Greeting sayHello(@RequestParam String name) {
        String worldMessage = worldClient.getWorldMessage();
        String message = String.format("Hello, %s! %s", name, worldMessage);
        return new Greeting(message);
    }
}

这里使用了 @Autowired 注解自动注入了 WorldClient,并在 sayHello 方法中调用了 worldClient.getWorldMessage() 方法,获取 world-service 的响应结果,并将结果与 Hello, ${name}! 拼接为最终的返回结果。

最后,创建一个名为 WorldClient 的接口,并使用 @FeignClient 注解标记该接口,以便使用 OpenFeign 进行远程调用:

@FeignClient(name = "world-service")
public interface WorldClient {

    @GetMapping("/world")
    String getWorldMessage();
}

这里使用了 @FeignClient 注解,指定了被调用的服务名为 world-service,并定义了一个 getWorldMessage 方法用于获取 world-service 的响应结果。

创建 world-service

创建一个名为 world-service 的 Spring Boot 应用程序。在 pom.xml 文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

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

这里只添加了 Spring Cloud Sleuth 的依赖。

application.properties 文件中添加以下配置:

spring.application.name=world-service
server.port=8082

然后创建一个名为 WorldController 的类,用于接收请求并返回响应:

@RestController
public class WorldController {

    @GetMapping("/world")
    public String sayWorld() {
        return "World!";
    }
}

这里只是简单地返回了一个字符串 “World!”。

测试分布式跟踪

在完成以上步骤后,我们可以启动 hello-serviceworld-service,并访问 http://localhost:8081/hello?name=John,可以看到返回结果为 Hello, John! World!

此时,我们可以通过访问 Zipkin Server 的 Web 界面来查看分布式跟踪数据。在浏览器中输入 http://localhost:9411/zipkin/,然后点击 Find Traces 按钮,可以看到所有的跟踪数据,如下图所示:

可以看到,hello-serviceworld-service 都被成功地追踪到了,并且可以查看它们之间的调用关系和耗时等信息。

总结

本文介绍了如何在 Spring Boot 中使用 Spring Cloud Sleuth 来实现分布式跟踪。我们通过一个简单的示例演示了如何使用 Spring Cloud Sleuth 对微服务之间的调用进行跟踪,并使用 Zipkin 来存储和展示跟踪数据。

使用 Spring Cloud Sleuth 不仅可以方便地排查问题,同时也可以帮助我们了解微服务系统的性能瓶颈和瓶颈所在服务,从而更好地优化系统。文章来源地址https://www.toymoban.com/news/detail-476994.html

到了这里,关于# Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识

    【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识

                                                                                   💧 S p r i n g C l o u d S l e u t h 分布式链路跟踪 color{#FF1493}{Spring Cloud Sleuth 分布式链路跟踪} Sp r in g Cl o u d Sl e u t h 分布式链路跟踪 💧           🌷 仰望

    2024年02月11日
    浏览(14)
  • SpringBoot 如何使用 Sleuth 进行分布式跟踪

    SpringBoot 如何使用 Sleuth 进行分布式跟踪

    在现代分布式应用程序中,跟踪请求和了解应用程序的性能是至关重要的。Spring Boot Sleuth是一个分布式跟踪解决方案,它可以帮助您在分布式系统中跟踪请求并分析性能问题。本文将介绍如何在Spring Boot应用程序中使用Sleuth进行分布式跟踪。 Spring Boot Sleuth是Spring Cloud的一部分

    2024年02月07日
    浏览(8)
  • Spring Boot如何实现分布式消息队列

    Spring Boot如何实现分布式消息队列

    在分布式系统中,消息队列是非常重要的一部分,可以帮助开发人员实现异步处理、解耦系统、提高系统可靠性等。本文将介绍如何使用 Spring Boot 实现分布式消息队列。 消息队列是一种存储消息的容器,可以缓存消息并在需要的时候按照一定的规则将消息发送给消费者。常

    2024年02月14日
    浏览(8)
  • Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

    Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月04日
    浏览(16)
  • Spring boot微服务分布式框架Rouyi Cloud权限认证

    Spring boot微服务分布式框架Rouyi Cloud权限认证

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 专栏 描述 Java项目实战 介绍Java组件安装、使用;手写框架等 Aws服务器实战 Aws Linux服务器上操作nginx、git、JDK、Vue Jav

    2024年04月14日
    浏览(8)
  • 使用Spring Cloud实现分布式系统的注册中心——nacos详解

    Nacos是一个全新的分布式系统服务框架,它能够提供服务发现、配置管理、动态DNS、流量管理等多种功能。其中最为重要的功能之一就是服务发现,可以使得开发者更加方便地管理和维护分布式系统的各个服务。 在Spring Cloud中,我们可以使用Nacos作为注册中心,实现服务的注

    2024年02月05日
    浏览(38)
  • Spring Boot如何实现分布式系统中的服务发现和注册?

    Spring Boot如何实现分布式系统中的服务发现和注册?

    随着互联网的快速发展,越来越多的企业开始将自己的业务迁移到分布式系统中。在这种情况下,服务发现和注册变得尤为重要。对于分布式系统中的每个服务来说,它需要知道其他服务的位置和状态,这样才能进行通信和协作。Spring Boot提供了一些工具和框架,可以帮助我

    2024年02月07日
    浏览(10)
  • spring boot 3 + spring cloud sleuth 无法注入Tracer问题

    spring boot 3 + spring cloud sleuth 无法注入Tracer问题

    由于升级springboot版本到3.1.0后,导致原先的plumelog的traceId获取方式失败。 项目启动报错,无法找到tracer bean实例。 前往spring cloud sleuth官网,发现此项目已经迁移到别的项目,也就是说引入的依赖不单单只是引入spring-cloud-starter-sleuth组件,还要引入其他依赖 在此贴下完整的项

    2024年02月07日
    浏览(11)
  • 使用Spring Cloud构建分布式应用

    Spring Cloud是一组构建分布式系统的框架,它提供了各种工具和库,帮助开发人员构建高可用、可伸缩、灵活的分布式应用程序。本文将介绍如何使用Spring Cloud构建分布式应用程序。 微服务架构 Spring Cloud是基于微服务架构设计的,该架构将应用程序划分为一组小型、自治的服

    2024年02月06日
    浏览(42)
  • Spring Cloud微服务架构:实现分布式系统的无缝协作

    Spring Cloud微服务架构:实现分布式系统的无缝协作

    🎉欢迎来到架构设计专栏~Spring Cloud微服务架构:实现分布式系统的无缝协作 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包