2017-01-04 4 views
0

Bitte schauen Sie sich den folgenden Code an und erklären Sie, warum meine Ausgabe auf deadLetters zeigt. sender() zeigt auf den toten Buchstaben für die Nachricht vom Actor-System

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" 
} 

Ausgang:

Actor[akka://DemoSystem/deadLetters] 

Vielen Dank im Voraus

+0

Sicherlich, weil du es nicht von einem anderen Schauspieler nennst, also gibt es keinen Platz, auf den du antworten könntest? (Daher wäre es nicht sinnvoll, einen Absender zu haben) – Clint

+0

Also nur wenn ein Akteur B von einem anderen Akteur A aufgerufen wird, ist der Absender() Akteur A. Ist das richtig? –

Antwort

2

Dies ist, weil der Schauspieler System kein Postfach hat, die veröffentlicht werden könnten antwortet.

Die Sender-Referenz wird verwendet, um Antworten zu senden, ohne dass der kontaktierte Akteur wissen muss, wer ihn angerufen hat, sowie den Ask-Mechanismus.

Sie können dies in der Praxis sehen, indem Sie den gleichen Anruf von einem anderen Akteur im Vergleich zum System versuchen, und Sie sehen, dass die Absenderreferenz gültig ist, wenn sie von einem anderen Akteur aufgerufen wird.

Verwandte Themen