Java 按并发任务数限制异步Mono(不基于时间)
假设我有一个方法,它接受一个参数并返回一个异步完成的Java 按并发任务数限制异步Mono(不基于时间),java,project-reactor,Java,Project Reactor,假设我有一个方法,它接受一个参数并返回一个异步完成的Mono。例如: Random random = new Random(); ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(16); Mono<Integer> fetch(String a) { return Mono.create(em -> { scheduledExecutorSer
Mono
。例如:
Random random = new Random();
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(16);
Mono<Integer> fetch(String a) {
return Mono.create(em -> {
scheduledExecutorService.schedule(() -> em.next(a + " result"),
10 + random.nextInt(50), TimeUnit.MILLISECONDS);
});
}
Random Random=new Random();
ScheduledExecutorService ScheduledExecutorService=Executors.newScheduledThreadPool(16);
单声道提取(字符串a){
返回Mono.create(em->{
scheduledExecutorService.schedule(()->em.next(a+“result”),
10+随机.nextInt(50),时间单位为毫秒);
});
}
假设我有一个Flux
,我可以将它输入到上面的fetch
方法中,它可以包含很多元素
是否有一种方法可以确保并行调用该方法,但将并发调用的数量限制为预定义的数量
例如,在上述示例中为4,虽然我有16个可用线程,但从这个角度来看,我始终保留12个备用线程。假设“feed-to”,您的意思是您使用的是flux.flatMap(this::fetch)
,
然后,您可以通过调用flux.flatMap(this::fetch,4)
来设置flatMap并发性
此外,您的代码有两个编译错误:
Mono
的返回类型与您提供给接收器的项目类型不匹配(a+“result”
)。我猜你的意思是单声道.next
方法。我猜你的意思是。成功
private Flux fetchAll(){
回流通量范围(0,50)
.map(i->Integer.toString(i))
.flatMap(this::fetch,4);
}
专用单声道提取(字符串a){
返回Mono.create(em->
scheduledExecutorService.schedule(()->em.success(a+“结果”),
10+random.nextInt(50),时间单位为毫秒)
);
}