액자 안에 context.actorSelection
을 사용하면 현재 액터 컨트롤 (/ by 감독자)에서 액터를 찾습니다. actor1이 actor2에 의해 시작되지 않았거나 actor2에 의해 감독되지 않았기 때문에 아무 것도 해결되지 않습니다. actor1이 실제로 actor2에 의해 소유/시작된 경우 을 수행하여 actor2의 해당 자식 배우를 얻을 수 있습니다. 이유는 context.system.actorSelection
입니다. 검색을 시작하기 전에 먼저 "system
"을 "위로"이동하고 배우의 경로를 정규화해야합니다. 시스템은 액터 1을 system.actorOf
으로 시작한 경우이를 소유하므로 해당 경로를 사용하면 system
부터 시작할 수 있습니다. 이 예제를 실행하면
class Actor1 extends Actor{
override def preStart = {
context.actorOf(Props[Actor2], "actor2")
}
def receive = {
case _ =>
}
}
class Actor2 extends Actor{
override def preStart = {println("my path is: " + context.self.path)}
def receive = {
case _ =>
}
}
object FutureTesting {
def main(args: Array[String]) {
val sys = ActorSystem("test")
implicit val ec = sys.dispatcher
//Starting an Actor2 from system
sys.actorOf(Props[Actor2], "actor2")
//Starting an Actor1 from system which in turn starts an Actor2
sys.actorOf(Props[Actor1], "actor1")
}
}
, 당신은 볼 수 있습니다 :
my path is: akka://test/user/actor1/actor2
my path is: akka://test/user/actor2
그래서 당신은 내가 실행 Actor2
의 두 인스턴스를 가질 것을 볼 수 있습니다
약간의 코드가 무슨 뜻인지 보여 내 시스템; 하나는 sys
에서 직접 생성되었고 이는 룩업 경로로 /user/actor2
에 연결되고 하나는 Actor1
의 인스턴스에서 시작하여 경로로 /user/actor1/actor2
에 연결됩니다.
액터 시스템은 계층 적이며이 예제는이를 보여줍니다. ActorSystem
그 자체가 모든 것의 근원입니다. 액터 선택은 XPath와 비슷합니다. 즉, 컨텍스트에서 선택하는 것이 문제에서 선택됩니다.
다음의 제공 사항 :에 의해 무슨 뜻 이죠) actor1' 3을 만드는 방법'을 보여줍니다 2) 코드 1) 스칼라/Akka 버전 "을하지 않습니다 작업"? 그것은 컴파일합니까? 런타임시 예외가 발생합니까? 'actor1'은'HelloResponse ("hello back1") 메시지를받지 못합니까? 오류 메시지는 무엇을 말합니까? – agilesteel
나는 무엇이 의미가 없는지에 대한 설명을 추가했다. 관심을 가져 주셔서 감사합니다. – lujop