Spring Cloud项目中实现分布式日志链路追踪

大家好,我是升仔

在微服务架构中,分布式日志链路追踪对于监控和理解服务间复杂的调用关系至关重要。本文详细介绍如何在Spring Cloud项目中使用Spring Cloud Sleuth和Zipkin实现分布式链路追踪。

搭建Zipkin Server

Zipkin Server是存储和展示追踪数据的中心。使用Docker是搭建Zipkin Server的一种简便方法。

使用Docker运行Zipkin

运行以下命令以启动Zipkin服务器:

docker run -d -p 9411:9411 openzipkin/zipkin

这条命令会在本地的9411端口提供Zipkin服务。

创建Spring Boot微服务

我们将创建两个Spring Boot微服务应用,一个作为服务提供者(user-service),另一个作为服务消费者(client-app)。

服务提供者:user-service

添加依赖

user-servicepom.xml中添加Spring Cloud Sleuth和Zipkin的依赖:

<dependencies>
    <!-- Spring Cloud Sleuth and Zipkin -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
创建应用主类

定义应用的主类UserServiceApplication

@SpringBootApplication
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}
创建控制器

定义一个简单的REST控制器UserController

@RestController
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @GetMapping("/user/{id}")
    public String getUserById(@PathVariable String id) {
        logger.info("Fetching user with id {}", id);
        return "User " + id;
    }
}
配置文件

application.yml中配置应用名和Zipkin服务器地址:

server:
  port: 8081
spring:
  application:
    name: user-service
  zipkin:
    base-url: http://localhost:9411

服务消费者:client-app

添加相同的依赖

client-apppom.xml中添加与user-service相同的依赖。

创建应用主类

定义应用的主类ClientAppApplication

创建控制器

定义一个REST控制器ClientController来调用user-service

@RestController
public class ClientController {

    private final RestTemplate restTemplate;

    public ClientController(RestTemplateBuilder builder) {
        this.restTemplate = builder.build();
    }

    @GetMapping("/fetch-user/{id}")
    public String fetchUser(@PathVariable String id) {
        return restTemplate.getForObject("http://localhost:8081/user/" + id, String.class);
    }
}
配置文件

application.yml中配置应用名和Zipkin服务器地址:

server:
  port: 8080
spring:
  application:
    name: client-app
  zipkin:
    base-url: http://localhost:9411

测试链路追踪

  1. 启动Zipkin Server。
  2. 分别启动user-serviceclient-app
  3. 访问client-app/fetch-user/{id}端点来间接调用user-service
  4. 在Zipkin UI(通常位于http://localhost:9411)查看追踪信息。
最后说一句(求关注,求赞,别白嫖)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文已收录于我的技术网站,next-java.com, 有大厂完整面经,工作技术等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注非常感激

相关推荐
Wx-bishekaifayuan6 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer086 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
小白冲鸭6 小时前
【报错解决】使用@SpringJunitConfig时报空指针异常
spring·java后端开发
WX187021128737 小时前
在分布式光伏电站如何进行电能质量的治理?
分布式
LuckyLay7 小时前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring
Stringzhua7 小时前
【SpringCloud】Kafka消息中间件
spring·spring cloud·kafka
不能再留遗憾了10 小时前
RabbitMQ 高级特性——消息分发
分布式·rabbitmq·ruby
茶馆大橘10 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
成富12 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
鹿屿二向箔13 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的汽车租赁共享平台系统
spring·mvc·mybatis