Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单螺纹焊剂_Java_Mono_Flux_Project Reactor_Reactor - Fatal编程技术网

Java 单螺纹焊剂

Java 单螺纹焊剂,java,mono,flux,project-reactor,reactor,Java,Mono,Flux,Project Reactor,Reactor,我有来自db的Flux(例如5个元素)。 我需要从每个Foo中获取一些信息,将所有信息设置为Mono,发送到另一个rest资源,获取Mono,并在每个Foo中使用所有信息 我在Flux.flatMap()中使用了大量的Mono.zipWith()和Mono.zipWhen(),但是创建我的请求和发送到资源的过程由5个线程执行5次。 Flux<Foo> flux = dao.getAll(); Flux<Foo> fluxAfterProcessing = flux.fla

我有来自db的
Flux
(例如5个元素)。 我需要从每个Foo中获取一些信息,将所有信息设置为
Mono
,发送到另一个rest资源,获取
Mono
,并在每个Foo中使用所有信息

我在
Flux.flatMap()
中使用了大量的
Mono.zipWith()
Mono.zipWhen()
但是创建我的请求和发送到资源的过程由5个线程执行5次。

Flux<Foo> flux = dao.getAll();
Flux<Foo> fluxAfterProcessing = flux.flatMap(foo -> monoFilters.map(...));
Mono<Tuple2<MyRequest, MyResponse>> mono = 
                      monoFilters.flatMap(filter -> monoRequest.map(...))
                                 .zipWhen(request -> api.send(request))
                                 .flatMap(tuple -> monoResponseFilters.map(...));
return fluxAfterProcessing.flatMap(foo -> 
                       monoResponseFilters.zipWith(mono).map(...))
Flux-Flux=dao.getAll();
fluxAfterProcessing=Flux.flatMap(foo->monoFilters.map(…);
单声道=
monoFilters.flatMap(filter->monoRequest.map(…)
.zipWhen(请求->api.send(请求))
.flatMap(元组->单响应过滤器.map(…);
返回fluxAfterProcessing.flatMap(foo->
monoResponseFilters.zipWith(mono.map)(…)

如何在Flux中一个线程只处理一次Mono函数?

假设此任务如下所示:

Flux<Foo> foos = dao.getAll();
Mono<List<Foo>> everything = foos.collectList();

Mono<MyRequest> request = everything
    // collect the data into another Mono, then into request
    .map(list -> list.stream().map(Foo::getData).collect(toList()))
    .map(data -> new MyRequest(data));

return request.zipWhen(request -> api.send(request));
  • 从数据库中获取一些值
  • 当所有值到达时,将它们包装在请求中并发送出去
  • 带响应的压缩结果
这就引出了这样的问题:

Flux<Foo> foos = dao.getAll();
Mono<List<Foo>> everything = foos.collectList();

Mono<MyRequest> request = everything
    // collect the data into another Mono, then into request
    .map(list -> list.stream().map(Foo::getData).collect(toList()))
    .map(data -> new MyRequest(data));

return request.zipWhen(request -> api.send(request));

通过应用
flatMap
,您实际获得的发射量至少与初始
通量中的发射量相同。我想你们实际上想要使用的是,不是吗?但我需要返回通量,其中包含来自MyResponse@MaksymShamanovskyi为什么?若你们真的需要发射几个脉冲,那个么这就是原始代码所做的,所以并没有实质问题。如果您确实只需要发射一次,那么这就是
Mono
的用例。如果你想隐藏你的脉冲数,为什么不返回一个发布者呢?无论如何,还有一个
Mono::flux