在Akka Actor
中,我想向我的父母发送一条消息,但前提是它不是用户监护人(即仅当Actor
不是顶级演员时)。检查Actor
的父母是否为用户监护人的最佳方法是什么?
我可以做类似的事情:
if(context.parent.path.toString != "akka://system/user") { ... }
但有更好的方法吗?我希望能够做到这样的事情:
if(context.parent != context.system.userGuardian) { ... }
答案 0 :(得分:1)
有点棘手,但它有效:
if(context.parent != context.system.asInstanceOf[ExtendedActorSystem].guardian) {...}
答案 1 :(得分:0)
如果您有对用户监护人的引用,您应该可以进行==
比较。这个简单的例子表明了相等的正确性。所以我想如果你想进行比较,你可以在某个地方解决用户监护人的问题并使其全局可用:
object RootGuardianTest extends App{
val system = ActorSystem("test")
system.actorOf(Props[ChildActor], "child")
}
trait RootComparison{ me:Actor =>
def initCompare{
val sel = context.system.actorSelection("/user")
sel ! Identify()
}
def checkCompare:Receive = {
case ActorIdentity(_, Some(ref)) =>
println(s"I am ${self.path}, and my parent is root: ${context.parent == ref}")
}
}
class ChildActor extends Actor with RootComparison{
val child2 = context.actorOf(Props[Child2Actor], "child2")
initCompare
def receive = checkCompare
}
class Child2Actor extends Actor with RootComparison{
initCompare
def receive = checkCompare
}
我,我只需查看父母路径的name
部分,看看它是否是“用户”。像这样:
val parentIsUser = context.parent.path.name == "user"