【发布时间】:2019-08-07 22:34:22
【问题描述】:
我想通过 Spring WebFlux 和给定的 REST-API 执行以下操作:
- 检索文件名列表 (GET /files)
- 删除每个检索到的文件(DELETE /files/local/{file name} for each)
问题是我不能将这两个动作结合到“一个”Mono 实例中。我目前的实现是不够的,因为它阻止 Mono 实例立即执行 api 调用,而不是执行它们的响应式调用。
我的非反应式实现:
public Mono cleanUpUploadedFiles() {
WebClient webClient = this.getWebClient();
// get all files / directories
Mono<FilesOverview> filesOverviewMono = this.getResource("/files", FilesOverview.class);
FilesOverview filesOverview = filesOverviewMono.block(); // TODO: prevent blocking mono
// delete file / directory one by one
for (FileOverview file : filesOverview.getFiles()) {
ClientResponse clientResponse;
clientResponse = webClient
.delete()
.uri(String.format("/files/local/%s", file.getName()))
.exchange()
.block(); // TODO: prevent blocking mono
if (clientResponse == null) {
return Mono.error(new MyException(String.format("could not execute rest call to delete uploaded files with uuid %s", file.getName())));
}
HttpStatus clientResponseStatusCode = clientResponse.statusCode();
if (clientResponseStatusCode.isError()) {
return Mono.error(new MyException(String.format("cannot delete uploaded files with uuid %s", file.getName())));
}
}
return Mono.empty(); // TODO: return Mono instance performing everything reactive without blocking
}
如何在一个响应式 Mono 实例中执行连续的 Web 请求?
【问题讨论】:
标签: java reactive-programming spring-webflux reactor