2013-12-19 49 views
1

我是Akka新手,但真的很喜歡這個框架。我瀏覽了Akka Actor documentation以及一些Playframework/typesafe教程。我已經成功地通過如何在播放框架中發送來自控制器的Akka actor關閉消息

val reapeter = Akka.system.actorOf(Props(classOf[RepeaterActor], data), name = "repeater") 

,做使用計劃任務週期性任務創建從一個控制器成功POST請求的演員。

現在我想從控制器中的GET/POST請求中發送此演員的停止消息。我曾嘗試

def stop = Action { 
    val sendStop = Akka.system.actorSelection("/user/repeater").tell(Shutdown, ActorRef.noSender) 
} 

和RepeaterActor的receieve方法

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

但我不能得到迴應。我不確定這是否與我的actorSelection方法有關,或者我如何進行消息調用。我如何爲從控制器調用的actor實現一個簡單的關閉鉤子?暫時只需要有一個這樣的RepeaterActors。

回答

2

首先,println不是一個好的解決方案。更好地使用記錄器:

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

第二件事是「殺死」演員。有內置的方式來做到這一點,只需發送一個PoisonPill。另外如果你想記錄Actor.postStop方法和日誌。

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

有了這種結構,你可以檢查,如果你正確關閉。

+0

原來問題實際上是在我的路由表中。我的停止方法從來沒有真正被調用。謝謝您的幫助! – craastad

相關問題