Scala 在异常后恢复以前的参与者状态
我有一个actor,它接收Int并将结果累积到缓冲区。有时,演员可以抛出异常。异常后将缓冲区的先前状态恢复到actor中的最佳方法是什么Scala 在异常后恢复以前的参与者状态,scala,akka,actor,Scala,Akka,Actor,我有一个actor,它接收Int并将结果累积到缓冲区。有时,演员可以抛出异常。异常后将缓冲区的先前状态恢复到actor中的最佳方法是什么 比尔 > P>为了恢复状态演员的状态,你应该考虑 AkkA持久性。您将需要一个持久存储(例如Cassandra或LevelDB)来持久化状态,并且框架将为您处理恢复状态的操作(前提是您有一个持久化器) 详细解释了如何做到这一点。 < P>除了Maunb的回答之外,还应该考虑分离 累积该值的部分,以及 可能失败的部分 分为以下两个方面: 累积的参与者应该创建
比尔 > P>为了恢复状态演员的状态,你应该考虑<强> AkkA持久性<强>。您将需要一个持久存储(例如Cassandra或LevelDB)来持久化状态,并且框架将为您处理恢复状态的操作(前提是您有一个
持久化器
)
详细解释了如何做到这一点。
< P>除了Maunb的回答之外,还应该考虑分离- 累积该值的部分,以及
- 可能失败的部分
有关这种方法的更多信息,请参见此答案,例如,为了控制发生的情况,您需要在父参与者上设置主管策略
override val supervisorStrategy =
OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
case e: Exception => {
println(s"got exception ~ ${e.getMessage()}")
Resume // Or Continue, Escalate, Restart, Stop
}
}
如果您希望处理异常,则恢复参与者,然后处理程序将返回resume
恢复时,参与者状态保持不变。您可以将主管策略设置为恢复。当您的参与者抛出异常时,主管将处理该异常,您的参与者将丢弃当前消息并继续下一条消息。(Akka的较新版本允许您在同一条消息上设置最大退休人数) 相反,如果希望参与者继续处理导致异常的消息,则可以使用try-catch-finally块