2017-01-04 1 views
0

아래 코드를보고 내 출력이 deadLetters를 가리키는 이유를 설명하십시오. 액터 시스템에서 메시지의 데드 레터를 가리키는 sender()

class DemoActor extends Actor { 
    def receive = { 
    case "foo" => println(sender()) 
    } 
} 


object Main extends App { 
    val actorSystem = ActorSystem("DemoSystem") 
    val demoActorRef = actorSystem.actorOf(Props[DemoActor]) 
    demoActorRef ! "foo" 
} 

출력 : 사전

+0

확실히 다른 배우에게서 부르지 않으므로 확실하지 않으므로 회신 할 곳이 없습니다. (따라서 송신자를 갖는 것이 현명하지 않을 것입니다.) – Clint

+0

따라서 액터 B가 다른 액터 A에서 호출 될 때만 sender()가 액터 A가됩니다. 맞습니까? –

답변

2

배우 시스템에 게시 될 수 답신의 사서함을 가지고 있지 않기 때문이다에서

Actor[akka://DemoSystem/deadLetters] 

감사합니다.

발신자 참조는 연락 한 사람이 누가 전화했는지 알 필요가없는 답장과 ask 메커니즘을 보내는 데 사용됩니다.

다른 액터와 동일한 호출을 시도하면 실제로 볼 수 있습니다. 그러면 다른 액터에서 호출 할 때 보낸 사람 참조가 유효하다는 것을 알 수 있습니다.