나는 akka를 사용하고 있습니다. 비동기 io에 대한 늦은 답장을 해결하기 위해 코드에서 일부 패턴을 보았습니다. 이 구현은 괜찮습니까? 블록없이 늦게 답장을 보내는 또 다른 방법이 있습니까? 응답을 기다리는 것은 ask
방법-a.k.a을 사용하여 보내는 동안Akka의 async io에서 늦게 응답
class ApplicationApi(asyncIo : ActorRef) extends Actor {
// store senders to late reply
val waiting = Map[request, ActorRef]()
def receive = {
// an actore request for a user, store it to late reply and ask for asyncIo actor to do the real job
case request : GetUser =>
waiting += (sender -> request)
asyncIo ! AsyncGet("http://app/user/" + request.userId)
// asyncio response, parse and reply
case response : AsyncResponse =>
val user = parseUser(response.body)
waiting.remove(response.request) match {
case Some(actor) => actor ! GetUserResponse(user)
}
}
}
나는 정확하다고 생각합니다. 나는'sender'가 Actor를 변경할 수있는 변수가 아니라 Actor의 변경 가능한 속성이라는 사실을 잊어 버렸습니다. –
중절 추출기가 정말 흥미 롭습니다. – sourcedelica