什么是通过名称输入参数引用actor的首选方式?

时间:2014-12-09 13:03:19

标签: akka

如果我将演员的名字作为输入参数,请致电http://example/restservices/{actorname}

获取对actor的引用的首选方法是:

Akka.system.actorOf(Props[MyActor], name = actorname) ! SOMETHING("some1")

Akka.system.actorSelection("/user/"+actorname) ! SOMETHING("some1")

1 个答案:

答案 0 :(得分:1)

您需要使用的方法取决于您是否有一个可以处理您的消息的现有Actor。在你的情况下使用actorOf我冒着风险,因为你为一个演员提供了一个名字,而且通过设计你不能在系统上有两个同名的演员。除了使用actorSelection之外,如果actor不存在,它也不会抛出任何错误,但根本不会处理该消息,它将进入DeadLetters邮箱。在这种情况下,最合理的解决方案是在DeadLetters上订阅一些现有的actor -

system.eventStream.subscribe(actorRed, classOf[DeadLetter])

您可以在接收方法中拦截DeadLetter:

def receive = {
  case DeadLetter(msg, from, to) =>
    // process message
}

这样你可以使用actorSelection,当你收到DeadLetter创建一个actor时,actorSelection应该按预期工作