반응형
Akka 배우의 Forward와 Tell의 차이점
동일한 메시지를 보낼 경우 tell과 forward의 차이점은 무엇입니까?
case msg: Message =>
otherActor tell (msg,sender)
과
case msg: Message =>
otherActor forward msg
는 sender()수신 측에 다릅니다.
tell (이라고도 함 !)을 사용하여 메시지를 보냅니다 .
A 에 메시지 M를 알려줍니다B . 이 메시지를에
B 알려줍니다C .
C생각하는 sender()메시지가 M있습니다 B.
전달을 사용하여 메시지를 보냅니다 .
A 에 메시지 M를 알려줍니다B . 해당 메시지를에
B 전달 합니다 C.
C생각하는 sender()메시지가 M있습니다 A.
지적 할 가치 forward가있는 tell것은를 사용하여 메시지 발신자를 명시 적으로 설정할 때 와 동일한 결과를 얻을 수 있다는 것 입니다. 그러나 이것은 전형적인 Akka 스타일이 아닙니다.
// inside `B`, when received `msg` from `A`
C tell (msg, A)
==
C forward msg
자세한 정보 는 forward 에 대한 문서를 참조하십시오 .
Tell은 보낸 사람을 메시지를 보내는 행위자로 설정합니다.
전달은 메시지의 원래 보낸 사람을 유지합니다.
target.tell (message, getSelf ()); 최종 개체 결과 = ""; target.forward (result, getContext ());
여기서 getself ()는 액터의 자체 참조입니다. getcontext ()는 감독자 참조입니다.
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: String =>
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: String =>
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: String =>
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"
}
참고 URL : https://stackoverflow.com/questions/25115547/difference-between-forward-and-tell-in-akka-actors
반응형
'Program Club' 카테고리의 다른 글
| 스칼라 : 부울에서 옵션으로 (0) | 2020.12.11 |
|---|---|
| Jenkins 빌드를 원격으로 트리거하고 매개 변수를 전달하는 방법 (0) | 2020.12.11 |
| 브라우저 시간 초과 (0) | 2020.12.09 |
| x86_64에서 정적 라이브러리를 컴파일 할 때 gcc가 암시 적으로 -fPIC 플래그를 제공하지 않는 이유 (0) | 2020.12.09 |
| 죽은 JavaScript 코드를 찾으십니까? (0) | 2020.12.09 |