将远程检测为连接错误
Detect remote akka connection error
我的项目包含两部分 - 一个是 akka 服务器,另一个是 play 框架。有时两者都可以重新启动。为了从 akka 服务器接收日志记录,我正在使用 Websocket 处理程序
def ws = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
CheckerActor.props(out)
}
使用订阅了某个远程 actor 更改的 actor。
class CheckerActor(out: ActorRef) extends Actor {
...
override def preStart() = {
context.actorSelection("akka.tcp://Sys@127.0.0.1:2553/user/logger") ! Subscribe()
}
override def postStop() {
context.actorSelection("akka.tcp://Sys@127.0.0.1:2553/user/logger") ! Unsubscribe()
}
def receive = {
case msg: LogMessage => out ! Json.toJson(msg)
...
}
}
远程记录器 actor 对 subscribe() unsubscribe() 事件做出反应并将日志消息发送到订阅的客户端。它工作正常,直到远程服务器没有挂起或刚刚重新启动。检测远程 akka 服务器已断开连接的最便宜的方法是什么(之后我可以再次订阅新启动的记录器)。我可以构建一些 pinger actor,如果我收到超时而不是尝试再次重新订阅,但简单的 ping 不能让我保证它们之间已经重新启动,它们会使系统更加复杂。可能存在其他解决方案。
您可以像观看本地演员一样观看远程演员。 Akka 在内部使用心跳消息来检查终止,我认为这与您的 'ping' 想法相似。
侦听 Terminated
消息将涵盖远程参与者失败的事件,但我不确定这是否涵盖断开连接事件。为此,您可以订阅 DisassociatedEvent
.
查看 Akka 文档中的远程事件部分:
http://doc.akka.io/docs/akka/snapshot/scala/remoting.html
我的项目包含两部分 - 一个是 akka 服务器,另一个是 play 框架。有时两者都可以重新启动。为了从 akka 服务器接收日志记录,我正在使用 Websocket 处理程序
def ws = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
CheckerActor.props(out)
}
使用订阅了某个远程 actor 更改的 actor。
class CheckerActor(out: ActorRef) extends Actor {
...
override def preStart() = {
context.actorSelection("akka.tcp://Sys@127.0.0.1:2553/user/logger") ! Subscribe()
}
override def postStop() {
context.actorSelection("akka.tcp://Sys@127.0.0.1:2553/user/logger") ! Unsubscribe()
}
def receive = {
case msg: LogMessage => out ! Json.toJson(msg)
...
}
}
远程记录器 actor 对 subscribe() unsubscribe() 事件做出反应并将日志消息发送到订阅的客户端。它工作正常,直到远程服务器没有挂起或刚刚重新启动。检测远程 akka 服务器已断开连接的最便宜的方法是什么(之后我可以再次订阅新启动的记录器)。我可以构建一些 pinger actor,如果我收到超时而不是尝试再次重新订阅,但简单的 ping 不能让我保证它们之间已经重新启动,它们会使系统更加复杂。可能存在其他解决方案。
您可以像观看本地演员一样观看远程演员。 Akka 在内部使用心跳消息来检查终止,我认为这与您的 'ping' 想法相似。
侦听 Terminated
消息将涵盖远程参与者失败的事件,但我不确定这是否涵盖断开连接事件。为此,您可以订阅 DisassociatedEvent
.
查看 Akka 文档中的远程事件部分: http://doc.akka.io/docs/akka/snapshot/scala/remoting.html