system.actorOf
의 구현을 드릴 다운하면 메서드 이름 makeChild
이 호출됩니다. 내부적으로 이것은 이라고하는 ActorRefProvider
특성 (내부적으로 LocalActorRefProvider
을 사용)에서 긴 방법을 사용합니다. 이 다소 긴 메서드는 자식 액터를 초기화합니다. 관련 부분은 다음과 같습니다
val routerDispatcher = system.dispatchers.lookup(p.routerConfig.routerDispatcher)
val routerMailbox = system.mailboxes.getMailboxType(routerProps, routerDispatcher.configurator.config)
// routers use context.actorOf() to create the routees, which does not allow us to pass
// these through, but obtain them here for early verification
val routeeDispatcher = system.dispatchers.lookup(p.dispatcher)
val routeeMailbox = system.mailboxes.getMailboxType(routeeProps, routeeDispatcher.configurator.config)
new RoutedActorRef(system, routerProps, routerDispatcher, routerMailbox, routeeProps, supervisor, path).initialize(async)
당신이 되돌려 ActorRef
일단, 사서함이 초기화 된 것을 의미하고 전송 두려워해서는 안 :
val props2 =
// mailbox and dispatcher defined in deploy should override props
(if (lookupDeploy) deployer.lookup(path) else deploy) match {
case Some(d) ⇒
(d.dispatcher, d.mailbox) match {
case (Deploy.NoDispatcherGiven, Deploy.NoMailboxGiven) ⇒ props
case (dsp, Deploy.NoMailboxGiven) ⇒ props.withDispatcher(dsp)
case (Deploy.NoMailboxGiven, mbx) ⇒ props.withMailbox(mbx)
case (dsp, mbx) ⇒ props.withDispatcher(dsp).withMailbox(mbx)
}
case _ ⇒ props // no deployment config found
}
아니면 Router
경우
명시 적으로 제공 메시지.
ActorRef
의 의미에 대해 생각하면 부분적으로/초기화되지 않은 ActorRef
을 제공하는 것이 약간 무의미합니다. 그것은 시스템 보증을 약하게 만들 것이고 프로그래머가 메시지를 전달하기 전에 두 번 생각하게 만들 것입니다. 이것은 프레임 워크의 반대쪽 욕망입니다.
그건 의미가 있습니다. system.actorOf의 반환이 즉시 사용 가능하지 않으면 ActorRef 대신 미래가 기대됩니다. 엄청 고마워. – anindyaju99
@ anindyaju99 환영합니다. 도움이 되었기 때문에 기쁩니다. –