2016-08-11 48 views
0

我有一個阿卡演員。我希望在系統生命週期中的應用程序啓動時啓動這個actor。玩框架2.5從哪個文件開始

目前我已經在renderLoginPage控制器使用它:

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:演員的名字[提醒-演員]不是唯一!]

,我應該寫的代碼發起的調度。

+0

是否要創建每個請求的演員?一種方法是使用AkkaGuiceSupport模塊。另一方面,您可以使用BalancingPool並告訴他應該創建多少個Actor。另一方面,你可以省略命名,只需調用system.actorOf(ReminderActor.props(kSessionService,userService)) – sascha10000

回答

1

你能做到這一點,而無需指定一個演員的名字:

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

但是這取決於你如何實現你的演員,你可以有一個演員在你的行動注入,並與蜱消息發送數據。

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 
    } 
} 
+0

很棒..它爲我工作:) – avy