【发布时间】:2019-12-04 15:40:56
【问题描述】:
我有一个用户名列表,想在不阻塞主线程的情况下从远程服务获取用户详细信息。我正在使用 Spring 的响应式客户端 WebClient。对于响应,我得到 Mono 然后订阅它并打印结果。
private Mono<User> getUser(String username) {
return webClient
.get()
.uri(uri + "/users/" + username)
.retrieve()
.bodyToMono(User.class)
.doOnError(e ->
logger.error("Error on retrieveing a user details {}", username));
}
我通过两种方式实现了这个任务:
使用Java stream
usernameList.stream()
.map(this::getUser)
.forEach(mono ->
mono.subscribe(System.out::println));
使用Flux.fromIterable:
Flux.fromIterable(usernameList)
.map(this::getUser)
.subscribe(mono ->
mono.subscribe(System.out::println));
似乎主线程并没有被两种方式阻塞。
在这种情况下,Java Stream 和 Flux.fromIterable 有什么区别?如果两者都在做同样的事情,建议使用哪一个?
【问题讨论】:
标签: java spring java-stream spring-webflux spring-webclient