Spring Cloud Sleuth 性能测试
Spring Cloud Sleuth是Spring Cloud为分布式服务跟踪提供的解决方案。Spring Webflux是Spring 5.0添加的新功能,是一个典型非阻塞异步的框架,它的核心是基于Reactor的相关API实现的。本文只针对Spring Cloud Sleuth 在Spring webFlux与Spring webMVC模式下的性能测试。
本文基于的Spring环境:
spring-boot:2.0.2.RELEASE
spring-cloud:Finchley.RELEASE
我准备了三个必要的程序来做测试,分别是
1、eureka-server
提供eureka服务注册中心。
2、trace-a
微服务的调用方,通过访问"http://localhost:9801/trace-a"调用下面trace-b的服务,其中调用方式webMVC使用阻塞的RestTemplate,webFlux使用非阻塞的WebClient方式。
3、trace-b
微服务的生产者,对外提供 “http://localhost:9802/trace-b” 的地址来完成一个简单的请求。
webflux模式下使用sleuth
- pom.xml 中添加maven依赖配置
<dependencies>
<!--引入springboot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
</dependencies>
- 配置文件application.properties
trace-a和trace-b项目配置基本一样(除配置端口、应用名称)。
spring.application.name=trace-a
server.port=9801
#eureka
eureka.client.service-url.defaultZone=http://localhost:8111/eureka/
#取样率
spring.sleuth.sampler.probability=1.0
- 主要代码
首先创建一个配置类WebClientConfig,定义WebClient实例。如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerExchangeFilterFunction;
import org.springframework.context.annotation