老师,问个题外话,这个问题困扰我挺久了......

来源:6-10 引入Gateway网关

WittChen

2026-05-20

既然webflux性能这么强,为什么没有把Tomcate给取代掉,是不是因为目前没有像SERVLET那么完善的开发体系

写回答

1回答

Danny_Idea

2026-05-21

我举个例子:

正常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去做会更有优势。




0
0

SpringCloudAlibaba高并发仿斗鱼直播平台实战

SpringCloudAlibaba高并发仿斗鱼直播平台实战

453 学习 · 389 问题

查看课程