Différence entre les acteurs avant et après

Quelle est la différence entre raconter et transmettre, au cas où je vais envoyer le même message:

case msg: Message => otherActor tell (msg,sender) 

et

 case msg: Message => otherActor forward msg 

L’ sender() sera différent à la réception.

Le message envoie en utilisant tell (également connu sous le nom de ! ):

A indique le message M à B
B dit ce message à C
C pense que l’ sender() du message M est B

Le message envoie en utilisant forward :

A indique le message M à B
B transmet ce message à C
C pense que l’ sender() du message M est A

Il convient de souligner que vous pouvez obtenir la même chose forward en définissant explicitement l’expéditeur d’un message à l’aide de tell , bien que cela ne soit pas typique du style Akka:

 // inside `B`, when received `msg` from `A` C tell (msg, A) == C forward msg 

Pour plus d’informations, reportez-vous à la documentation sur le sujet .

Tell définit l’expéditeur comme l’acteur qui envoie le message.

Forward conserve l’expéditeur d’origine du message.

target.tell (message, getSelf ()); final Object result = “”; target.forward (résultat, getContext ());

Ici, getself () est la référence de soi de l’acteur. getcontext () est la référence du superviseur.

 import akka.actor.{Actor, ActorSystem, Props} case object FromActor3 /** * forward method: Forwards the message and passes the original sender actor as the sender. */ object ActorForward extends App { class ActorExample extends Actor { def receive = { case message: Ssortingng => println(s"Message received from ${sender.path.name}, message = $message") val child = context.actorOf(Props[Actor2], "ChildActor") child ! message case FromActor3 => println("Response when forwarded by Actor2 to Actor3") } } class Actor2 extends Actor { def receive = { case message: Ssortingng => println(s"Message received from ${sender.path.name}, message = $message") val child = context.actorOf(Props[Actor3], "ChildActor") println("forwarding...") child forward message case _ => println("Unknown message") } } class Actor3 extends Actor { def receive = { case message: Ssortingng => println(s"Message received from ${sender.path.name}, message = $message") sender ! FromActor3 case _ => println("Unknown message") } } val actorSystem = ActorSystem("ActorSystem") val actor = actorSystem.actorOf(Props[ActorExample], "RootActor") actor ! "Hello" }