在Project Reactor中确定反应式链中字节数组的来源

时间:2018-10-28 21:20:54

标签: java spring reactive-programming project-reactor reactor

我正在从3个灰度图像构造一个彩色图像。我使用rsocket针对每个色带发出3个独立(并行)请求,该请求返回Mono<byte[]>。我需要将所有3个字节的数组收集为一个列表,以便可以正确构建映像。但是,对于在下一个反应式操作中如何确定字节数组属于哪个频段,我感到困惑。

以下是一些示例代码:

 return Flux.just(redRequest, blueRequest, greenRequest)
                .parallel()
                .flatMap(client::getBytes) // calls the remote service to get the bytes for the given color band
                .sequential()
                .collectList()
                .map(response -> {
                   byte[] redBytes = response.get(0); //???
                }

我创建了一个包装器类来保存原始请求,字节数组和带标识符,以便可以在每个操作中传递所有对象,但是由于我的rsocket客户端的响应是Mono,所以我只能实现(可能错误的术语)通过在map或flatMap中调用字节数组来实现,此时我无法访问包装类,而且我不确定字节数组属于哪个带。

我可以通过不简单地在并行请求中调用客户端来解决此问题吗?我是否可以保证项目将按照我在Flux.just()中定义的顺序通过链传播。

基本上在最后一张图中,我只是真的想要能够知道哪个字节数组属于哪个色带。

1 个答案:

答案 0 :(得分:2)

用颜色字段将对象中的每个请求包裹起来,并更改发送这些请求的管道中的MTKView部分:

flatMap