Java 确定项目反应器中反应链中字节数组的来源
我正在从3个灰度图像构建一个彩色图像。我使用rsocket为每个色带发出3个单独(并行)请求,它返回一个Java 确定项目反应器中反应链中字节数组的来源,java,spring,reactive-programming,project-reactor,reactor,Java,Spring,Reactive Programming,Project Reactor,Reactor,我正在从3个灰度图像构建一个彩色图像。我使用rsocket为每个色带发出3个单独(并行)请求,它返回一个Mono。我需要收集所有3字节数组作为一个列表,以便我可以正确地构建映像。然而,对于如何在下一个反应操作中识别字节数组属于哪个频带,我感到困惑 以下是一些示例代码: return Flux.just(redRequest, blueRequest, greenRequest) .parallel() .flatMap(clien
Mono
。我需要收集所有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()
中定义的顺序在链中传播
基本上在上一个映射中,我只想知道哪个字节数组属于哪个色带。用颜色字段将每个请求包装在对象中,并更改发送这些请求的管道的
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;
//
})
在对象中用颜色字段包装每个请求,并更改发送这些请求的管道的
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;
//
})
非常简单和优雅的解决方案。事实上,作为解决方案的一部分,我已经创建了一个包装器类,但我所需要的正是对来自客户机方法的响应调用map操作来访问字节并在包装器上设置它们。非常感谢。非常简单和优雅的解决方案。事实上,作为解决方案的一部分,我已经创建了一个包装器类,但我所需要的正是对来自客户机方法的响应调用map操作来访问字节并在包装器上设置它们。非常感谢。