2016-01-13 100 views
3

我已经阅读了Akka docs on fault tolerance & supervision和我认为我完全得到他们,有一个很大的例外(没有双关语意图)。阻止Akka演员的目的是什么?

为什么你会想要/需要stop一个小孩演员???

在文档中唯一的线索是:

接近二郎方式是战略只停留在他们失败的孩子,然后采取主管纠正措施......

但对我来说,停止一个孩子就像说“不再执行此代码”一样,对我来说,这与对代码进行新的更改实际上是相同的,

  • 每一个演员扮演的男主角系统
  • 要简单地停止演员意味着演员目前没有一个角色不再一些重要的角色,并假定该系统现在可以以某种方式(神奇),而它的工作
  • 如此反复,对我来说,这是没有比重构代码,甚至没有任何演员多,然后部署这些变化
  • 不同

我敢肯定,我只是没有看到过的森林这个树上的树,但我只是没有看到任何用例,我会有这个大的compl前演员系统,每个演员都在进行关键性的工作,然后把它交给下一个关键演员,但是随后我停止了演员,神奇地是整个系统继续完美地工作。

简而言之:阻止演员(对我来说)就像是从行驶中的车辆中扯下变速器。这怎么能成为一件好东西?!?

+0

有人总是会经历并降低我的Akka问题。我感觉Akka的用户指南编辑团队中有人对我产生怨恨,因为我呼吁他们的文档需要改进的地方! **这个问题是关于主题,不是一个骗局,而是一个[SSCCE](http://sscce.org)。为什么downvote?** – smeeb

+0

百特...是你?!?至少有勇气说话! – smeeb

+0

这绝对是一个有效的问题,我可以为Akka团队担保,我们没有理由或希望减少在文档中提出遗漏的问题。但让他们修复的更好方法是在github上打开问题,我偶然偶然发现了这个问题。 –

回答

2

“错误内核”模式的本质是委托有风险的操作并保护基本状态,通常为一次性操作产生子actor,并且当操作完成并将其结果发送到其他地方时,小孩演员或父母演员需要阻止它。 (否则儿童演员将保持活跃/泄漏)

+0

Thanks @Viktor Klang(+1) - 这是一个有趣的答案,我可能决定恢复绿色检查(对不起znurgl)。当你说“*否则孩子 - 演员会保持活动/泄漏*”,你是什么意思**泄漏**?我假设,如果它没有任何工作要做(否则它只是占用资源),但我们不想确定你的意思是“泄漏”,并且担心有一些与框架有关的大事在这里失踪了。再次感谢! – smeeb

+0

演员一直活着直到停下来,所以如果演员永远不会有别的事情要做,那就需要停下来。行动者可以通过手工,监督或当他们的父母演员停止时停止。 –

1

如果孩子的演员正在做一个可以安全终止的较长过程,例如视频编码或某种文件转换,并且您必须部署一个新的构建,那么终止标志对于优雅地停止运行进程。

+0

好吧,我*想*我明白了。我认为可以这样说* Stop *是一种特殊的用例,并不是错误处理生命周期中的正常部分(意思是说,你通常不会在父母的“SupervisorStrategy#Decider”中阻止一个孩子) )。 – smeeb

0

每一个演员扮演的男主角系统中的一些关键性的作用

这是你正在遭遇困境,我可以创造一个儿童演员到做一个工作,例如对数据库执行查询或维护连接用户的状态,这是它唯一的目的。

一旦数据库查询完成或者用户已正常断开连接,子actor就不再有任何角色可以播放,应该停止播放,以便释放其拥有的任何资源。

要简单地停止演员意味着演员目前没有一个角色的任何>长,并假定该系统现在可以以某种方式(神奇),没有它

工作,该系统能够继续因为我可以在需要/需要时创建新的儿童演员。