如果我将演员的名字作为输入参数,请致电http://example/restservices/{actorname}
。
获取对actor的引用的首选方法是:
Akka.system.actorOf(Props[MyActor], name = actorname) ! SOMETHING("some1")
或
Akka.system.actorSelection("/user/"+actorname) ! SOMETHING("some1")
答案 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
应该按预期工作