Spring Reactive Programming: Как создать динамический список издателей c в качестве входных данных для Flux.merge - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в программировании Spring Reactive и разрабатываю конечную точку REST, которая возвращает Flux. Например:

 @PostMapping
 public Flux<MyResponse> processRequests(@RequestBody List<MyRequest> requests) {

        return Flux.merge(Arrays.asList(dataSource.processRequest(requests.get(0)), dataSource2.processRequest(requests.get(0)))).parallel()
                    .runOn(Schedulers.elastic()).sequential();
}

Каждый источник данных (dataSource и dataSource2) в примере кода реализует интерфейс, который выглядит следующим образом:

public interface MyResponseAdapter {
    Flux<MyResponse> processRequest(MyRequest request);
}

Этот код отлично работает, так как возвращает Flux, как и ожидалось, но, как вы можете видеть, код ссылается только на первый элемент в списке MyRequest. Что мне нужно сделать, это создать Flux.merge для каждого элемента в списке MyRequest. Кто-нибудь может направить меня в правильном направлении?

1 Ответ

0 голосов
/ 22 апреля 2020

Мне кажется, я нашел простое решение:

        List<Flux<MyResponse>> results = new ArrayList<>();
        for (MyRequest myRequest : requests ) {
            results.add(dataSource.processRequest(myRequest));
            results.add(dataSource2.processRequest(myRequest));
        }

        return Flux.merge(results).parallel().runOn(Schedulers.elastic()).sequential();

...