Scala 如何在play框架中从控制器发送Akka actor关机消息

Scala 如何在play框架中从控制器发送Akka actor关机消息,scala,playframework,event-handling,akka,Scala,Playframework,Event Handling,Akka,我刚接触Akka,但已经很喜欢这个框架了。我已经浏览了和一些Playframework/typesafe教程。我已通过在控制器中的成功POST请求成功创建了一个参与者 val reapeter = Akka.system.actorOf(Props(classOf[RepeaterActor], data), name = "repeater") 它使用计划任务执行定期任务 现在,我想从控制器中的GET/POST请求向这个参与者发送一条停止消息。我试过了 def stop = Action {

我刚接触Akka,但已经很喜欢这个框架了。我已经浏览了和一些Playframework/typesafe教程。我已通过在控制器中的成功POST请求成功创建了一个参与者

val reapeter = Akka.system.actorOf(Props(classOf[RepeaterActor], data), name = "repeater")
它使用计划任务执行定期任务

现在,我想从控制器中的GET/POST请求向这个参与者发送一条停止消息。我试过了

def stop = Action {
    val sendStop = Akka.system.actorSelection("/user/repeater").tell(Shutdown, ActorRef.noSender)
}
在RepeaterActor的接收方法中

receieve {
    ...
    case Shutdown => {
        println("shutting down")
        context.system.stop(self)
    }
}

但我没有得到回应。我不确定我的actorSelection方法是否有问题,或者我是如何进行消息调用的。如何为可从控制器调用的参与者实现简单的关闭钩子?目前只需要这些中继器中的一个。

首先,println不是一个好的解决方案。更好地使用伐木工人:

import play.api.Logger 
val logger = Logger("akka")
logger.debug("shutting down")
第二件事是“杀死”演员。有一种内置的方法可以做到这一点,只需发送一个。另外,如果您想记录方法和内部日志

def postStop(): Unit = {
  logger.debug("shutting down")
  super.postStop()
}

通过这种结构,您可以检查是否正确关闭

原来问题其实出在我的路由表上。我的停止方法实际上从未被调用。谢谢你的帮助!