spring webflux什么时候进行订阅?我到处都读到必须订阅,否则不会发生任何变化。subscribe()在我使用 Spring Webflux 的短暂时间里,我从未在控制器或服务中见过两者。
我的疑问还在于,当使用flatMap()、map()、... 等时,订阅会在什么时候发生?
我所读到的内容并不能真正解决我的疑虑。
public Flux method(){
....
myFlux.flatMap(data -> {
....
}).flatMap(e -> { .... });
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个异步问题,但每个问题flatMap同时运行?...所以有时我注意到的一些数据是空的。
我是反应式编程的新手,遇到了这个问题:
[
{
"customerDTO": {
"scanAvailable": true
},
"bankAccountDTOs": {
"scanAvailable": true,
"prefetch": -1
}
}
]
Run Code Online (Sandbox Code Playgroud)
数据传输对象:
public class ResponseClientDTO {
private Mono<CustomerDTO> customerDTO;
private Flux<BankAccountDTO> bankAccountDTOs;
}
Run Code Online (Sandbox Code Playgroud)
服务:
public Flux<ResponseClientDTO> getCustomerWithBankAccounts(String customerId){
Flux<BankAccountDTO> bankAccounts = webClient
.get()
.uri(uriBuilder ->
uriBuilder.path("customers")
.queryParam("customerId", customerId).build())
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(BankAccountDTO.class);
Mono<CustomerDTO> cMono = findOne(customerId);
ResponseClientDTO responseClientDTO = new ResponseClientDTO();
responseClientDTO.setBankAccountDTOs(bankAccounts);
responseClientDTO.setCustomerDTO(cMono);
return Flux.just(responseClientDTO);
}
Run Code Online (Sandbox Code Playgroud)
我从另一个 API 查询端点,它返回一个Flux<BankAccounts>. 我想找到客户所有的银行账户。