我想在 Webflux 环境中执行两个业务操作,第二个操作仅在第一个操作成功后才发生。第二个操作完成后,我想返回第一个操作的结果。第二个操作调用 org.springframework.web.reactive.function.client.WebClient。这是我到目前为止所尝试过的:
public Mono<ResponseEntity<Resource>> callOperations(){
return service.operation1()
.flatMap(resource -> {
service.operation2();
return resource;
})
.map(ResponseEntity::ok);
}
我也尝试使用 then 和 subscribe 但我无法让 webclient 执行调用并返回 service.operation1 的结果。我必须做什么?
您需要使用反应式运算符构建一个流,并让 WebFlux 订阅它。在您的代码片段中没有订阅
service.operation2()
public Mono<ResponseEntity<Resource>> callOperations(){
return service.operation1()
.flatMap(resource -> {
return service.operation2()
.thenReturn(resource);
})
...
}
正确的习惯用法是调用 Mono.delayUntil():
您的代码就很简单:
public Mono<ResponseEntity<Resource>> callOperations(){
return service.operation1()
.delayUntil(service.operation2())
...
}