繁体   English   中英

检查远程Akka actor是否可用

[英]Checking if remote Akka actor is available

如何检查我通过actorFor获得actorRef的远程actor是否还活着? 任何对文档的引用都将不胜感激。 我正在使用Scala的Akka。

我已经看到了对主管和死亡计时器的参考,但我并不觉得我的用例需要这么重的机器。 我只想让我的客户端检查主服务器是否使用已知路径,以及是否发送消息介绍自己。 如果主机未启动,则应等待一段时间再重试。

更新2:建议我只是使用乒乓询问测试来查看它是否还活着。 我明白这就像是

implicit val timeout = Timeout(5 seconds)
val future = actor ? AreYouAlive
try{
    Await.result(future, timeout.duration)
}catch{
    case e:AskTimeoutException => println("It's not there: "+e)
}

我想我已经对日志中存在例外情况感到困惑,现在它们仍然存在。 例如

  • 错误:java.net.ConnectException:连接被拒绝
  • 错误:java.nio.channels.ClosedChannelException:null

也许这就是它的工作方式,我必须接受日志中的错误/警告,而不是试图防止它们?

只需发送消息即可。 无论如何,在您发送消息后,它的机器可能会在纳秒内无法访问。 如果你没有得到任何答复,很可能已经死了。 在文档中有一个很大的章节: http//doc.akka.io/docs/akka/2.0.1/general/message-send-semantics.html

您永远不应该假设网络可用。 我们的架构师总是说分布式系统设计中有两个关键概念。

他们是:

  • 超时
  • 重试

如果消息在x时间段之后没有出现,则应该“超时”,然后您可以重试该消息。 使用超时,您不必担心特定错误 - 只有消息响应失败。 对于高级别的可用性,您可能需要考虑使用zookeeper等工具来处理群集/可用性监视。 请参阅此处的领导者选举:http: //zookeeper.apache.org/doc/trunk/recipes.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM