我的项目包含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