我有一位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]不是唯一的!]
我应该编写用于启动调度程序的代码。
答案 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
}
}