我已经阅读了Akka docs on fault tolerance & supervision,我认为我完全得到它们,但有一个很大的例外(没有双关语)。
为什么你想要/需要停止一个儿童演员???
文档中唯一的线索是:
更接近Erlang方式是在孩子失败时阻止孩子然后在主管中采取纠正措施的策略......
但是对我来说,停止一个孩子就像说“不再执行此代码”一样,对我而言,实际上与部署相同代码的新变化,该演员完全删除了该演员:
我确信我只是没有看到森林穿过树林,但我只是没有看到任何用例,我有这个庞大的复杂演员系统,每个演员都做重要的工作和然后把它交给下一个关键演员,但后来我停止了一个演员,神奇地整个系统继续完美地工作。
简而言之:阻止一个演员(对我而言)就像是从一辆移动的车辆中扯下变速器。这怎么可能是一个好/可取的东西?!
答案 0 :(得分:2)
“错误内核”模式的本质是委托冒险操作并保护基本状态,通常会为一次性操作生成子操作符,并且当该操作完成并且其结果在其他地方发送时,儿童演员或父演员需要阻止它。 (否则,儿童演员将保持活跃/泄密)
答案 1 :(得分:1)
如果子actor正在执行可以安全终止的更长的进程,例如视频编码或某种文件转换,并且您必须部署新的构建,那么终止符号对于停止运行将非常有用优雅地处理。
答案 2 :(得分:0)
每位演员在演员系统中扮演一些关键角色
这是你遇到麻烦的地方,我可以创建一个子actor来完成一项工作,例如对数据库执行查询或维护连接用户的状态,这是它唯一的目的。
一旦数据库查询完成或用户已正常断开连接,子actor就不再有任何角色可以播放,应该停止,以便它释放它所拥有的任何资源。
简单地停止演员意味着演员当前没有任何>更长的角色,并假设系统现在可以某种方式(神奇地)在没有它的情况下工作
系统能够继续,因为我可以在需要时创建新的子actor。