任何人都可以用一个很好的例子解释如何以及何时使用ActorIdentity
吗?
从文档中我可以发现“有一个内置的Identify消息,所有Actors都能理解并自动回复包含ActorRef的ActorIdentity消息”。
该声明是否意味着获得的演员说actorSelector
在我的演员中包含了ActorIdentity消息?
ActorSelection actorSelector = getContext().actorSelection("/A/B/*");
答案 0 :(得分:4)
当您向Identify
发送ActorSelection
讯息时,演员将回复(如果有)并发送ActorIdentity
讯息。
如果演员存在,ActorIdentity
消息将包含Some(actorRef)
。向ActorRef
发送消息比ActorSelection
更有效。
例如(来自手册):
class Follower extends Actor {
val identifyId = 1
context.actorSelection("/user/another") ! Identify(identifyId)
def receive = {
case ActorIdentity(`identifyId`, Some(ref)) =>
context.watch(ref)
context.become(active(ref))
case ActorIdentity(`identifyId`, None) => context.stop(self)
}
def active(another: ActorRef): Actor.Receive = {
case Terminated(`another`) => context.stop(self)
}
}
本手册中涉及此内容的部分称为Identifying Actors via Actor Selection。