我试图用rx风格的消费者数量有限(例如2个)进行长时间的操作。
问题是如何确保只有2名消费者同时履行其职责。
让我们有一个消费者界面:
public interface Consumer{
//Take a lot of time
Observable<Result> doJob(Task task);
}
和队列类:
public class Queue {
public void enqueue(Task task){
//TODO: enqueue task and do it with limited count of Consumers
}
}
如何组织任务队列和消费者的工作?
答案 0 :(得分:2)
使用调度程序。将并发工作限制为两个任务:
Scheduler scheduler = Schedulers.from(Executors.newFixedThreadPool(2));
events.flatMap(x ->
Observable.fromCallable(() -> process(x))
.subscribeOn(scheduler))
.subscribe(subscriber);