java - 识别 Project Reactor 中 react 链中字节数组的来源

标签 java spring reactive-programming project-reactor reactor

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

这里是一些示例代码:

 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,所以我只能实现(可能错误的术语)通过在映射或平面映射中调用字节数组,此时我无法访问我的包装类,并且我不确定字节数组属于哪个带。

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

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

最佳答案

使用颜色字段将每个请求包装在对象中,并更改发送这些请求的管道的 flatMap 部分:

Flux.just(
  new Request(redRequest, RED),
  new Request(blueRequest, BLUE),
  new Request(greenRequest, GREEN)
)
.parallel()
.flatMap(request -> 
  client.getBytes(request)
    .map(response -> new Response(response.get(0), request.color))
)
.sequential()
.collectList()
.map(response -> {
  byte[] redBytes = response.bytes;
  Color color = response.color;
  // 
})

关于java - 识别 Project Reactor 中 react 链中字节数组的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53036191/

相关文章:

java - 我的程序使用 Java 需要多少内存

java - spring mvc Controller 接受具有可变数量的键/值的JSON对象

java - 并行程序在scala中运行

java - 使 RxJava 运算符链并发

java - 使用 RX Java Operators 设计 API 流程

java - Android:如何打开未知文件类型

java - TextView 不显示在对话框中

java - 准备好的语句可以开箱即用吗?

java - 从抽象类调用方法

Spring Cloud 溪流kinesis Binder