如何在播放框架中从控制器发送 Akka actor 关闭消息



我是Akka的新手,但已经非常喜欢这个框架了。 我已经浏览了Akka Actor文档和一些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)
}

和中继器演员的接收方法

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

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

首先,println 不是一个好的解决方案。更好地使用记录器:

import play.api.Logger 
val logger = Logger("akka")
logger.debug("shutting down")

第二件事是"杀死"演员。有内置的方法就是发送毒丸。另外,如果您想记录Actor.postStop方法和内部日志。

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

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

相关内容

  • 没有找到相关文章

最新更新