【问题标题】:Can i restart a remote Akka Actor?我可以重新启动远程 Akka Actor 吗?
【发布时间】:2018-04-26 09:31:52
【问题描述】:

我假设一个主管 Actor 正在监督一个远程 Actor。如果远程参与者在处理请求时失败,是否有任何方法可以重新启动远程参与者。如果不可能,任何人都可以建议我解决这个问题的方法。 提前谢谢你。

【问题讨论】:

    标签: akka akka-remote-actor akka-remoting


    【解决方案1】:

    只需在父actor上设置重启监督策略即可。远程部署子演员并不重要。 https://doc.akka.io/docs/akka/current/fault-tolerance.html#creating-a-supervisor-strategy

    【讨论】:

    • 但是主管怎么会知道远程演员的死亡呢?你能举个例子解释一下吗?
    • 请阅读有关 akka 中容错如何工作的文档:doc.akka.io/docs/akka/current/fault-tolerance.html 该页面底部有一个示例。此外,远程部分解释了在失去通信的情况下故障检测如何工作:doc.akka.io/docs/akka/current/…
    • 我无法重新启动子演员。我给你一个例子。我有一个演员作为主管。在主管演员预启动方法中,我正在使用 val actorList:List[ActorRef] = List.fill(10)( context.actorOf(Child.props, "child") ) 创建一个包含 10 个演员的列表
    • 之后我正在等待终止子actor的消息。收到该消息后,我打电话给context.stop(self)。然后在 postStop() 方法中,我抛出了一个自定义异常。我的监督策略是 def one: SupervisorStrategy = { OneForOneStrategy(maxNrOfRetries = 5, withinTimeRange = 10 seconds) { case _:customException => Restart } } 我的子演员没有重新启动。你能告诉我这个错误吗?
    • 我不确定我是否理解您的流程。监督策略背后的意图是,当参与者失败(抛出未捕获的异常)时,监督策略将重新启动它(或停止它,取决于决策者)。调用 context.stop 显式停止actor。 postStop 在它已经停止之后执行,所以我认为那里的异常不会有任何影响。与其自己调用 context.stop,不如让 actor 立即抛出异常,然后监督策略就有机会发挥作用。
    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多