我的項目包含2個部分 - 一個是akka服務器,另一個是播放框架。兩者都可以重新啓動。從阿卡服務器接收日誌我使用的WebSocket處理器檢測遠程akka連接錯誤
def ws = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
CheckerActor.props(out)
}
與演員,訂閱了一些偏遠的演員變化。
class CheckerActor(out: ActorRef) extends Actor {
...
override def preStart() = {
context.actorSelection("akka.tcp://[email protected]:2553/user/logger") ! Subscribe()
}
override def postStop() {
context.actorSelection("akka.tcp://[email protected]:2553/user/logger") ! Unsubscribe()
}
def receive = {
case msg: LogMessage => out ! Json.toJson(msg)
...
}
}
遠程記錄器actor響應訂閱()unsubscribe()事件並向訂閱的客戶端發送日誌記錄消息。並且它工作正常,直到遠程服務器不掛起或剛剛重新啓動。什麼是最便宜的方式來檢測遠程akka服務器已斷開連接(之後,我可以再次訂閱新的啓動記錄器)。我可以建立一個pinger actor,如果我收到超時而不是嘗試再次重新簽名,但簡單的ping不能保證他們之間發生重新啓動,並且使系統更復雜。可能存在另一種解決方案。
DisassociatedEvent - 這是我期待的。 – Oleg