Spring Boot虚拟线程的性能还不如Webflux?( 二 )

Spring Boot Webflux程序application.properties配置文件:
server.port=3000spring.r2dbc.url=r2dbc:mysql://localhost:3306/testdbspring.r2dbc.username=dbserspring.r2dbc.password=dbpwdUser实体(这里DD也省略了构造函数、getter和setter):
public class User {@Idprivate String email;private String first;private String last;private String city;private String county;private int age;// 省略了构造函数、getter、setter}应用主类:
@EnableWebFlux@SpringBootApplicationpublic class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}}提供CRUD操作的UserRepository:
public interface UserRepository extends R2dbcRepository<User, String> {}提供根据id查用户的业务类UserService:
@Servicepublic class UserService {@AutowiredUserRepository userRepository;public Mono<User> findById(String id) {return userRepository.findById(id);}}提供API接口的UserController类:
@RestController@RequestMapping("/")public class UserController {@AutowiredUserService userService;private SignatureAlgorithm sa = SignatureAlgorithm.HS256;private String jwtSecret = System.getenv("JWT_SECRET");@GetMapping("/")@ResponseStatus(HttpStatus.OK)public Mono<User> getUserById(@RequestHeader(HttpHeaders.AUTHORIZATION) String authHdr) {String jwtString = authHdr.replace("Bearer","");Claims claims = Jwts.parser().setSigningKey(jwtSecret.getBytes()).parseClaimsJws(jwtString).getBody();return userService.findById((String)claims.get("email"));}}测试结果接下来是重头戏了,作者对两个技术方案都做了500w个请求的测试 , 评估的不同并发连接级别包含:50、100、300 。
具体结果如下三张图:

Spring Boot虚拟线程的性能还不如Webflux?

文章插图
50并发连接
Spring Boot虚拟线程的性能还不如Webflux?

文章插图
100并发连接
Spring Boot虚拟线程的性能还不如Webflux?

文章插图
300并发连接
最后,作者得出结论:Spring Boot Webflux要更优于带虚拟线程的Spring Boot 。
Spring Boot虚拟线程的性能还不如Webflux?

文章插图
似乎引入了虚拟线程还不如已经在用的Webflux?不知道大家是否有做过相关调研呢?如果有的话,欢迎在留言区一起聊聊~我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐 。

【Spring Boot虚拟线程的性能还不如Webflux?】


推荐阅读