大家好,我是升仔
在微服务架构中,分布式日志链路追踪对于监控和理解服务间复杂的调用关系至关重要。本文详细介绍如何在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-service
的pom.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-app
的pom.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
测试链路追踪
- 启动Zipkin Server。
- 分别启动
user-service
和client-app
。 - 访问
client-app
的/fetch-user/{id}
端点来间接调用user-service
。 - 在Zipkin UI(通常位于
http://localhost:9411
)查看追踪信息。
最后说一句(求关注,求赞,别白嫖)
最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软
本文已收录于我的技术网站,next-java.com, 有大厂完整面经,工作技术等经验分享
求一键三连:点赞、分享、收藏
点赞对我真的非常重要!在线求赞,加个关注非常感激