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, 有大厂完整面经,工作技术等经验分享

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

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

相关推荐
北极无雪4 小时前
Spring源码学习(拓展篇):SpringMVC中的异常处理
java·开发语言·数据库·学习·spring·servlet
张某布响丸辣5 小时前
探索消息中间件:RabbitMQ深度解析
分布式·rabbitmq
Amagi.5 小时前
Spring中Bean的作用域
java·后端·spring
wclass-zhengge5 小时前
RabbitMQ篇(死信交换机)
分布式·rabbitmq
J老熊6 小时前
Spring Cloud Netflix Eureka 注册中心讲解和案例示范
java·后端·spring·spring cloud·面试·eureka·系统架构
蜜桃小阿雯6 小时前
JAVA开源项目 旅游管理系统 计算机毕业设计
java·开发语言·jvm·spring cloud·开源·intellij-idea·旅游
TheManba6 小时前
04. maven 三种项目打包方式 pom、jar、war 的区别(记一次 Spring 项目启动报错)
spring·maven·jar
努力的布布6 小时前
SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
java·后端·spring
xujinwei_gingko6 小时前
Spring MVC 常用注解
java·spring·mvc
LearnTech_1236 小时前
【学习笔记】手写一个简单的 Spring MVC
笔记·学习·spring·spring mvc