Spring反应式编程:如何创建一个动态的Publishers列表作为Flux.merge的输入。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring反应式编程:如何创建一个动态的Publishers列表作为Flux.merge的输入。相关的知识,希望对你有一定的参考价值。

我是Spring Reactive编程的新手,我正在开发一个返回Flux的REST端点。 比如说,我在开发一个返回Flux的REST端点。

 @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();
}

示例代码中的每个数据souce(dataSource和dataSource2)都实现了一个像这样的接口。

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

这段代码工作得很好,它按照预期返回了Flux,但正如你所看到的,这段代码只引用了MyRequest列表中的第一个元素。 我需要做的是为MyRequest列表中的每个元素构造Flux.merge。 谁能给我指出正确的方向?

答案

我想我已经找到了一个简单的解决方案。

        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();

以上是关于Spring反应式编程:如何创建一个动态的Publishers列表作为Flux.merge的输入。的主要内容,如果未能解决你的问题,请参考以下文章

Spring 5 之 WebFlux 开发反应式 Web 应用

技术使用 Spring 5 的 WebFlux 开发反应式 Web 应用

Spring Boot (十四): 响应式编程以及 Spring Boot Webflux 快速入门

如何使用spring webflux在功能性反应java中编写具有多个if else的复杂代码

Spring 5高级编程

如何在反应式编程中初始化一个空的 Mono Class 对象?