要求:在轮询器/工作者场景中,轮询器应该停止轮询远程服务,直到有一个工作人员可以执行该任务。
背景: 由于对远程服务请求数量的限制限制,我试图将轮询与消费者隔离开来。这里的约束是,一旦某个任务被轮询器选中,如果在一定时间内没有处理,它将超时。我们的消费者可以任意长时间运行(10到10分钟)。
目前看直接解决方案,SynchronousQueue似乎是最简化的方法。
问题在于,如果我有2个轮询器和4个消费者,那么当4个消费者正在处理时,轮询器将首先从远程选择/轮询两个任务,然后等待消费者可用。这将导致2个任务超时。
这有一个不错的解决方法吗?或者我应该采用基于锁定的机制(如:Semaphore)?