老师,问个题外话,这个问题困扰我挺久了......
来源:6-10 引入Gateway网关
WittChen
2026-05-20
既然webflux性能这么强,为什么没有把Tomcate给取代掉,是不是因为目前没有像SERVLET那么完善的开发体系
写回答
1回答
-
我举个例子:
正常tomcat那种容器下,写crud可能是这样:
// 步骤清晰,像写说明书 User user = userService.getUser(userId); Order order = orderService.getOrder(orderId); List<Address> addresses = addressService.listByUser(userId); return new UserDetail(user, order, addresses);
但是如果你是在webflux容器下执行的话,就变成了:
return userService.getUser(userId) // 返回 Mono<User> .flatMap(user -> orderService.getOrder(orderId) .flatMap(order -> addressService.listByUser(userId) .collectList() // 转为 Mono<List> .map(addresses -> new UserDetail(user, order, addresses)) ) );
首先代码的可读性和可扩展性就差了不少,而且webflux的设计导致它在这种多IO阻塞的场景下,性能不好发挥。
而且如果真正要利用好webflux的性能,你还得升级你的db驱动包,让其支持异步化返回,例如升级驱动包为:R2DBC,而且R2DBC的生态和应用远不如传统的JDBC多,其内部也有比较多的bug。
而且在业务代码逻辑中,复杂IO的代码一定少不了,这种场景下让程序员用webflux的mono编程,会把人逼疯。
加上如今容器化技术的发展,大家面对高并发场景,更愿意走容器水平扩展的方式去解决。只有类似网关这种特殊场景用webflux去做会更有优势。
00
相似问题