최근에 나는 수업에서 배우를 래핑하여 자신이 ActorRef
을 처리 할 때 잃어버린 typesafety 중 일부를 되 찾을 수 있다고 생각했습니다. 결국 문제는 특정 메시지를 보낼 필요가있을뿐 아니라 예상 결과에 응답해야한다는 것입니다. 그래서 나는 결국 결과를보고 할 수 있도록 Promise
을 포함하는 액터에게 메시지를 보낼 수 있다고 생각했습니다.Akka 배우 : ask 패턴 대 Promise
그게 나쁜 생각입니까? 그것은 나에게 꽤 깔끔하게 보인다. 형식이 좋고 잘 작동한다. 왜 아이디어를 가진 사람이 없습니까? 내가 눈치 채지 못한 문제가 있습니까?
는 아무 문제가 패턴 기반의 솔루션
case class GetUser(id:Long)
(actorRef ! GetUser(1l)).mapTo[User]
class UserRepoActor extends Actor{
def receive={
case GetUser(id)=>
sender() ! getUser(id)
}
...
}
약속 기반 솔루션
case class GetUser(id: Long, resp: Promise[User])
val req = GetUser(1l,Promise())
actorRef ! req
req.resp.future // No casting!!
class UserRepoActor extends Actor{
def receive={
case GetUser(id,resp)=>
response.success(getUser(id))
}
...
}
약속이 포함 된 Actor에게 메시지를 보내면 무엇을 의미합니까? 어쨌든 들어오는 메시지에 일치 패턴을 지정해야합니다. 몇 가지 코드 샘플을 게시 할 수 있습니까? – sparkr