如何以及何时在Akka中使用ActorIdentity

时间:2016-01-09 11:27:21

标签: akka

任何人都可以用一个很好的例子解释如何以及何时使用ActorIdentity吗?

从文档中我可以发现“有一个内置的Identify消息,所有Actors都能理解并自动回复包含ActorRef的ActorIdentity消息”。

该声明是否意味着获得的演员说actorSelector在我的演员中包含了ActorIdentity消息?

ActorSelection actorSelector =  getContext().actorSelection("/A/B/*");

1 个答案:

答案 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