play framework 2.5从哪个文件开始

时间:2016-08-11 15:50:25

标签: scala playframework akka

我有一位akka演员。我想在系统的生命周期中启动一次应用程序启动这个角色。

目前我在renderLoginPage Controller使用它:

def loginPage: Action[AnyContent] = Action.async {
implicit request =>
  scheduler.sendReminder(kSessionService,userService)
  Logger.debug("Redirecting renderHomePage")
}

以下是我的演员调度程序代码:

    class Scheduler{
  val system = ActorSystem("system")
  def sendReminder(kSessionService: KSessionService, userService: UserService):Unit = {
    val reminder = system.actorOf(ReminderActor.props(kSessionService,userService), "reminder-actor")
    reminder ! ReminderActor.Tick
  }

}

现在我遇到的问题是:当我从应用程序注销时,它再次呈现登录页面并尝试创建具有相同名称的actor。所以我得到了一个例外:

  

[InvalidActorNameException:actor name [reminder-actor]不是唯一的!]

我应该编写用于启动调度程序的代码。

1 个答案:

答案 0 :(得分:1)

您可以在不指定演员姓名的情况下执行此操作:

system.actorOf(ReminderActor.props(kSessionService,userService))

但是根据你如何实现你的演员,你可以在你的Action中注入一个actor并使用Tick消息发送数据。

reminder ! ReminderActor.Tick(kSessionService,userService)

检查急切的绑定:https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection#Eager-bindings

我认为你可以这样做:

class Module(system: ActorSystem) extends AbstractModule {
  def configure() = {
     //Set your binding here
  }
}