如何在控制器中执行两个单声道并行任务。 Spring WebFlux

How to execute two Mono parrallel tasks in controller. Spring WebFlux

调用controller时,需要启动两个provider。其中之一(personProvider)必须在后台完成其工作并将数据写入 Redis 缓存(我在这里不需要他的工作结果)。我需要将第二个 (accountsProvider) 的结果映射并发送到调用服务。请告诉我如何 运行 它们并行。我的解决方案不起作用,因为它们始终如一地执行。

@GetMapping(value = "/accounts", produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<myDTO> accountsController(@RequestHeader("Channel") String channel,
                                      @RequestHeader("Session") String sessionId) {
    return clientSessionProvider.getClientSession(sessionId, channel) // return Mono<String>
            .flatMap(clientData-> {
                personProvider.getPersonCard(clientData)     // My background task return Mono<PersonCard>
                        .subscribeOn(Schedulers.boundedElastic());
                return accountsProvider.getAccounts(clientData) // return Mono<Accounts>
                        .subscribeOn(Schedulers.boundedElastic());
            })
            .map(myDTOMapper::map);
}

我创建静态调度程序作为我的控制器的字段class:

private static final Scheduler backgroundTaskScheduler = Schedulers.newParallel("backgroundTaskScheduler", 2);

 public Mono<myDTO> accountsController(@RequestHeader("Channel") String channel,
                                          @RequestHeader("Session") String sessionId) {
        return clientSessionProvider.getClientSession(sessionId, channel)
                .flatMap(clientData-> {
                    backgroundTaskScheduler.schedule(() -> personProvider.getPersonCard(clientData));
                    return accountsProvider.getAccounts(clientData);
                })
                .map(myDTOMapper::map);

在这种情况下,我的 personProvider 在其他线程中启动并且不会阻止来自控制器的响应。