질문 :올바른 패턴
Akka 배우의 상태를 축적에 대한 올바른 패턴은 무엇입니까?
상황 :
의 내가 몇 가지 서비스를 모두 반환 데이터가 있다고 가정 해 봅시다.
class ServiceA extends Actor {
def receive = {
case _ => sender ! AResponse(100)
}
}
class ServiceB extends Actor {
def receive = {
case _ => sender ! BResponse("n")
}
}
// ...
나는 이러한 모든 서비스에 이야기 한 후 다시 원래의 보낸 사람에게 모든 데이터와 응답을 보내, 자신의 응답을 추적 유지 좌표 하나 개의 제어/감독 배우를 갖고 싶어.
class Supervisor extends Actor {
def receive = {
case "begin" => begin
case AResponse(id) => ???
case BResponse(letter) => ???
}
// end goal:
def gotEverything(id: Int, letter: String) =
originalSender ! (id, letter)
def begin = {
ServiceA ! "a"
ServiceB ! "b"
}
}
서비스 응답이 들어 오면 어떻게 해당 상태를 모두 연관시킬 수 있습니까? 알다시피, 만약 내가 ARTSponse의 값을 var aResponse: Int
에 할당한다면, 다른 메시지가 수신됨에 따라 var가 끊임없이 변하기 때문에 메시지를 기다리는 동안에는 그 메시지에 의존 할 수 없다. BResponse
메시지 .
나는 ask
을 사용할 수 있고 단지/flatMap Future
의 중첩을 사용할 수 있다는 것을 알았지 만, 나는 그것이 나쁜 패턴이라는 것을 읽었습니다. 미래가 없어도이 모든 것을 성취 할 수있는 방법이 있습니까?
'aResponse'가 두 번 이상 변경되는 이유는 무엇입니까? 'ServiceA'에게만 하나의 메세지를 보냅니다. 당신의 목표는 정확히 무엇입니까? 'AResponse'와'BResponse'를받을 때까지 기다리고'gotEverything'을 값으로 호출하십시오. – vptheron
>> 목표가 정확히 무엇입니까?AResponse와 BResponse를 받고 값이있는 gotEverything을 호출 할 때까지 기다리십시오. 예 –
식별자 또는 액터 ref가있는 목록에 응답을 저장할 수 있습니다 – wedens