나는 근로자 수영장이있는 CalculationSupervisor
배우가 있습니다.
계산을 할 때마다 CalculationSupervisor
은 라우터를 사용하여 근로자에게 CalculationRequest
을 브로드 캐스팅합니다.Akka 방송 : 첫 번째 답장을 받고 다른 사람을 버리십시오.
가장 빠른 계산 결과를 얻고 다른 결과는 무시해야합니다.
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();
}
}
첫 번째 (가장 빠른)이 올 및 결과 들어오는 메시지를 폐기의 로직을 구현하는 가장 좋은 패턴은 무엇인가 : 다음과 같이
CalculationSupervisor
보인다?
CalculationSupervisor에 대한 요청이 많아서 모두 처리하고 싶습니다. 귀하의 접근 방식에서 들어오는 CalculationRequest에 대한 CalculationResult를 얻으면 다른 요청에 대한 처리 결과가 중지됩니다. 사용자의 솔루션은 계산 요구 사항 식별자와 해당 상태를 저장하는 맵을 사용하여 확장 할 수 있습니다. 이것은 내 원래 생각이지만, 더 우아한 해결책을 찾고 싶습니다 :) –