云计算百科
云计算领域专业知识百科平台

spring ai 中常见代码解读 用 webFlux 做高并发的服务器(入门4)

无论是对接第三方平台要求我们的接口要做到高并发、还是自己要求的高并发平台,都有哪些解决方案 比如要求复杂业务逻辑的 200/每秒

常用方法:增加硬件资源

最合适的方法 还是要在代码质量上 怎么能保证做到高并发。

一:具体怎么做呢。那我们就看看 spring 的webFlux 功能,看看下面的代码 它为什么就能做到高并发

// 获取所有用户(返回用户列表流)
@GetMapping("/users")
public Flux<User> getAllUsers() {
return userRepository.findAll();
}

二:webFlux 完整的例子

Spring WebFlux 通俗示例(以 User 为例)

用一个简单的“用户管理”场景,解释 Spring WebFlux 的核心用法,假设你有一个用户信息接口。


第一步:定义用户类(User)

public class User {
private String id;
private String name;
private int age;

// 省略构造方法、Getter/Setter
}


第二步:创建响应式 Repository(模拟数据)

这里用内存存储模拟数据库,实际开发中可用 MongoDB Reactive 等真正的响应式数据库。

@Repository
public class UserRepository {
// 模拟一个用户列表
private final List<User> users = Arrays.asList(
new User("1", "张三", 25),
new User("2", "李四", 30)
);

// 根据ID查找用户(返回 Mono)
public Mono<User> findById(String id) {
return Mono.justOrEmpty(
users.stream()
.filter(user -> user.getId().equals(id))
.findFirst()
);
}

// 查找所有用户(返回 Flux)
public Flux<User> findAll() {
return Flux.fromIterable(users);
}

// 添加用户(模拟保存)
public Mono<User> save(User user) {
users.add(user);
return Mono.just(user);
}
}


第三步:编写 WebFlux 控制器(注解驱动)

使用 @RestController 和 @GetMapping,类似 Spring MVC,但返回的是 Mono 或 Flux。

@RestController
public class UserController {

@Autowired
private UserRepository userRepository;

// 根据ID获取用户(返回单个用户)
@GetMapping("/users/{id}")
public Mono<User> getUserById(@PathVariable String id) {
return userRepository.findById(id);
}

// 获取所有用户(返回用户列表流)
@GetMapping("/users")
public Flux<User> getAllUsers() {
return userRepository.findAll();
}

// 添加用户(接收JSON请求体)
@PostMapping("/users")
public Mono<User> addUser(@RequestBody Mono<User> userMono) {
return userMono.flatMap(user -> userRepository.save(user));
}
}


关键点解释

  • 为什么用 Mono 和 Flux?

    • Mono:表示“未来某个时刻返回 0 或 1 个结果”(比如查单个用户)。
    • Flux:表示“未来返回一串数据流”(比如查所有用户)。
    • 它们都是非阻塞的,不会让线程傻等结果。
  • 和传统 Spring MVC 的区别?

    • 传统做法:每个请求占用一个线程,如果数据库查询慢,线程会被阻塞。
    • WebFlux 做法:线程不会阻塞,数据库准备好数据时自动通知,用少量线程处理更多请求。

  • 举个实际场景

    假设你的系统有 1 万个并发请求查询用户:

    • 传统 MVC:可能需要 1 万个线程,线程频繁切换,资源耗尽。
    • WebFlux:可能只需几十个线程轮询处理,数据库返回数据时才处理,省资源。

    总结

    • WebFlux 适合:高并发、IO 密集操作(如大量数据库/网络请求)。
    • User 例子核心:用 Mono 和 Flux 表示异步操作,接口写法类似 MVC,但底层是非阻塞的。
    • 简单理解:把同步的“等结果”变成异步的“结果好了再通知我”。
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » spring ai 中常见代码解读 用 webFlux 做高并发的服务器(入门4)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!