响应式编程框架 WebFlux在实际开发中的一些痛点
1. 前言
起初这个问题是为了回到知乎上的一个提问:为什么大多数程序员认为响应式编程不易理解,甚至反人类?
但是写着写着发现内容还挺多的,于是整理成一篇博客 吧。
以下是在实际开发中碰到的一些问题。
2. 几乎所有的方法返回套上了Mono Flux
从一个请求的入口
@GetMapping("check")
public Mono<ApiResponse<String>> hlCheck(){
return Mono.just(ApiResponse.success("I am fine. version is: " + version));
}
到从数据库的查询结果(使用的r2dbc)
@Override
public Flux<AntiquarianBook> findByBookName(String bookName){
return antiquarianBookRepository.findAll();
}
甚至一些IO操作的工具类,为了异步非阻塞的 方式来处理,几乎”污染“了所有方法。
public static Flux<String> fromPath(Path path) {
return Flux.using(() -> Files.lines(path),
Flux::fromStream,
BaseStream::close
);
}
而这也直接导致,没法方便快捷的做缓存!因为你拿到的方法返回是Mono,Flux,而不是完成的数据。
所以也就引发了下面这个问题