不要在父供应商演员重启时重启处理演员
Don't restart processing actors on parent supplier actor restart
首先,我对 Akka 和演员模型还很陌生,所以也许我做错了。
我有一个输入 actor,它从流源获取数据并将它们传递给具有一些内部状态的子处理器 actor。如果连接中断,输入 actor 可能会崩溃,这会触发其重启。问题是,除此之外,它还会触发其子项的重启,从而使它们失去状态。我不希望这样,因为输入流可能会恢复并且它们的状态将再次变得相关。此外,处理器是根据输入中的某些数据产生的,因此我看不到在输入 actor 之外创建它们的方法。
也就是说,问题是"how do I restart only input of actor pipeline without restarting further stages"?
这种情况的完美解决方案是使用 Akka Persistence。
将 akka-persistence 与您正在使用的数据库一起使用并保存参与者的内部状态
您可以在这里找到更多相关信息:http://doc.akka.io/docs/akka/current/scala/persistence.html
希望我解决了你的问题!谢谢:)
基本上有 3 种类型的 Actor 重启原因(1)系统错误,例如发生异常时(2)瞬态错误,这完全是您正在处理的事情(连接丢失)和(3)腐败的内部状态。因为你有一个 parent-child 关系,所以它的 child 会重新启动。此时我不确定您是否可以通过 SupervisionStrategy 处理它。因此,请看这里 http://doc.akka.io/docs/akka/snapshot/general/supervision.html#What_Restarting_Means - 这也是我“引用”的来源)
处理此问题的另一种方法可能是连接的容错处理。在这里你必须接近:
(1) 将连接处理和错误处理放到一个单独的 child-actor 中。底层监管策略将是 OneForOne(默认),这意味着如果 child 死亡,只有 child 会重新启动。
(2) 你有两个根Actor,它们将成为actor系统的actor。一个 connectionActor 和您的 inputActor。您将把 connectionActor 的实例传递给 inputActor,或者反过来,是从 connectionActor 请求数据还是将数据发送到 inputActor。
如果您是 akka-actors 的新手,这会有点困难。但我建议阅读文档的介绍(根据您使用的版本):
http://doc.akka.io/docs/akka/snapshot/scala.html
首先,我对 Akka 和演员模型还很陌生,所以也许我做错了。
我有一个输入 actor,它从流源获取数据并将它们传递给具有一些内部状态的子处理器 actor。如果连接中断,输入 actor 可能会崩溃,这会触发其重启。问题是,除此之外,它还会触发其子项的重启,从而使它们失去状态。我不希望这样,因为输入流可能会恢复并且它们的状态将再次变得相关。此外,处理器是根据输入中的某些数据产生的,因此我看不到在输入 actor 之外创建它们的方法。
也就是说,问题是"how do I restart only input of actor pipeline without restarting further stages"?
这种情况的完美解决方案是使用 Akka Persistence。 将 akka-persistence 与您正在使用的数据库一起使用并保存参与者的内部状态
您可以在这里找到更多相关信息:http://doc.akka.io/docs/akka/current/scala/persistence.html
希望我解决了你的问题!谢谢:)
基本上有 3 种类型的 Actor 重启原因(1)系统错误,例如发生异常时(2)瞬态错误,这完全是您正在处理的事情(连接丢失)和(3)腐败的内部状态。因为你有一个 parent-child 关系,所以它的 child 会重新启动。此时我不确定您是否可以通过 SupervisionStrategy 处理它。因此,请看这里 http://doc.akka.io/docs/akka/snapshot/general/supervision.html#What_Restarting_Means - 这也是我“引用”的来源)
处理此问题的另一种方法可能是连接的容错处理。在这里你必须接近: (1) 将连接处理和错误处理放到一个单独的 child-actor 中。底层监管策略将是 OneForOne(默认),这意味着如果 child 死亡,只有 child 会重新启动。
(2) 你有两个根Actor,它们将成为actor系统的actor。一个 connectionActor 和您的 inputActor。您将把 connectionActor 的实例传递给 inputActor,或者反过来,是从 connectionActor 请求数据还是将数据发送到 inputActor。
如果您是 akka-actors 的新手,这会有点困难。但我建议阅读文档的介绍(根据您使用的版本): http://doc.akka.io/docs/akka/snapshot/scala.html