给出以下代码
public static void main(String[] args) {
long start = System.currentTimeMillis();
Flux.<Long>generate(s -> s.next(System.currentTimeMillis() - start))
.flatMap(DemoApp::delayedAction)
.doOnNext(l -> System.out.println(l + " -- " + (System.currentTimeMillis() - start)))
.blockLast(Duration.ofSeconds(3));
}
private static Publisher<? extends Long> delayedAction(Long l) {
return Mono.just(l).delayElement(Duration.ofSeconds(1));
}
从输出中可以看出,大量事件已被处理&#34;同时在delayedAction
。
在这个例子中,256个事件在几毫秒内生成,然后等待大约一秒,直到它们再次被发射。
我想将此数字限制为例如10,我该怎么做?
解决方案应独立于delayedAction
背景
延迟行动中真正发生的事情是:我做HTTP请求并启动无限量(或非常大量)的请求并不是一个好主意。
答案 0 :(得分:1)
已有一种方法:Flux.flatMap(Function> mapper, int concurrency)
从其文档:
concurrency参数允许控制可以订阅和并行合并的Publisher数量。