【发布时间】:2021-05-13 23:08:03
【问题描述】:
使用 spring WebFlux,我想一个接一个地发送 HTTP 请求,直到响应满足某个条件。我还需要收集所有回复。在阻塞世界中,解决方案是这样的:
List<String> responses = new ArrayList<>();
String lastResponse;
do {
lastResponse = webClient.get()
.uri(uri)
.retrieve()
.bodyToMono(String.class)
.block();
responses.add(lastResponse);
} while(!finished(lastResponse));
如何在不阻塞的情况下实现这一点?
注意:有一个简单的递归解决方案,但我正在寻找一种更优雅的方式:
private List<String> collectRemaining() {
return webClient.get()
.uri(uri)
.retrieve()
.bodyToMono(String.class)
.flatMap(response -> {
if(finished(response)) {
return List.of(response);
}
return collectRemaining().flatMap(remaining ->
Stream.concat(Stream.of(response), remaining.stream()).collect(Collectors.toList());
});
}
【问题讨论】:
标签: java spring-webflux project-reactor spring-webclient