Scala – Difference between forward and tell in akka actors

actorakkascala

What is a difference between tell and forward, in case I will send the same message:

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

and

case msg: Message =>
  otherActor forward msg

Best Solution

The sender() will be different on the receiving end.


Message sends using tell (also known as !):

A tells message M to B.
B tells that message to C.
C thinks the sender() of message M is B.


Message sends using forward:

A tells message M to B.
B forwards that message to C.
C thinks the sender() of message M is A.



Worth pointing out is, that you can achieve the same as forward when explicitly setting the sender of a message using tell, however this is not typical Akka-style:

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



For more info refer to the docs about forward.