【发布时间】:2017-11-11 16:45:04
【问题描述】:
我有一个带有工作池的 CalculationSupervisor 演员。
每次我需要进行一些计算时,CalculationSupervisor 使用路由器向工作人员广播CalculationRequest。
我需要得到最快计算的结果,而忽略其他结果。
CalculationSupervisor 如下所示:
public class CalculationSupervisor extends AbstractActor {
private Router router = new Router(new RoundRobinRoutingLogic());
public static Props props() {
return Props.create(CalculationSupervisor.class, CalculationSupervisor::new);
}
@Override
public Receive createReceive() {
return receiveBuilder()
.match(RegisterWorker.class, registration -> {
final String workerName = registration.name();
final ActorRef worker =
context().actorOf(Worker.props(workerName), workerName);
router = router.addRoutee(worker);
})
.match(CalculationRequest.class, (request) -> {
router.route(new Broadcast(request), self());
})
.match(CalculationResult.class, (result) -> {
// process only the first (the fastest) result
})
.build();
}
}
实现丢弃第一个(最快)结果后出现的消息的逻辑的最佳模式是什么?
【问题讨论】: