Java 单螺纹焊剂
我有来自db的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
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
。