提交 3881b068 编写于 作者: 梦境迷离's avatar 梦境迷离

fix 符号,时间:2019-11-05 22:40:53

上级 c1d970b9
......@@ -20,17 +20,17 @@ Actor系统监督描述了actor之间的依赖关系:主管将任务委托给
* 永久停止下属
* 使失败升级,从而使自身失败
必须始终将actor视为监督体系的一部分,这说明了第四种选择的存在(作为上级主管也从属于另一位主管),并对前三种情况有影响:恢复一名actor会恢复其所有下属,
必须始终将actor视为监督体系的一部分,这说明了第四种选择的存在(作为上级主管也从属于另一位主管),并对前三种情况有影响:恢复一名actor会恢复其所有下属,
重新启动一名actor意味着重新启动其所有下属,同样,终止一名actor也将终止其所有下属。
应该注意的是,Actor类的preRestart钩子的默认行为是在重新启动之前终止它的所有子类,但是这个挂钩可以被重写;递归重新启动适用于执行这个钩子之后留下的所有子程序。
每个监控器都配置了一个函数,将所有可能的故障原因(即异常)转换为上述四种选择之一;
每个监控器都配置了一个函数,将所有可能的故障原因(即异常)转换为上述四种选择之一;
值得注意的是,此函数不接受失败的actor的身份作为输入。很容易想出这样做可能是不够灵活的,例如希望对不同的下属actor采用不同的战略。
在这一点上,理解监督是对于递归的故障处理结构是至关重要的。如果您试图在一个级别上做太多事情,就很难进行推理,因此在这种情况下推荐的方法是添加一个级别的监督。
Akka实施了一种称为“父母监督”的特定形式。actor只能由其他actor创建(其中,顶级actor由库提供,并且每个创建的actor都由其父程序进行监督。)
Akka实施了一种称为“父母监督”的特定形式。actor只能由其他actor创建(其中,顶级actor由库提供,并且每个创建的actor都由其父程序进行监督。)
这种限制使得actor监督等级的形成隐含并鼓励合理的设计决策。应该指出的是,这也保证了行为者不可能成为孤儿,也不会被外部的监督者所依附,否则他们可能会不知不觉地被抓到。
此外,这将为actor应用程序(子树)提供一个自然而干净的关闭过程。
此外,这将为actor应用程序(子树)提供一个自然而干净的关闭过程。
注意:监控相关的父-子通信发生在特殊的系统消息中,这些邮件有自己的邮箱,与用户消息分开。
这意味着,相对于普通消息,与监督相关的事件并不具有决定性的有序性。通常,用户不能影响正常消息和失败通知的顺序。
......@@ -58,7 +58,7 @@ Akka实施了一种称为“父母监督”的特定形式。actor只能由其
根actor是所有所谓的“顶级”actor的祖父母,并使用`SupervisorStrategy.stoppingStrategy`监督策略来监督“顶层Scopes的actor path”中提到的所有特殊actor,其目的是在任何类型的例外情况下终止孩子。
所有其他可移植对象都将升级为…。但是对谁呢?因为每个真正的actor都有一个监督者,所以根监护人的监督者不可能是真正的actor。
因为这意味着它是“泡沫之外的”,它被称为“泡沫行者”。这是一个合成ActorRef,它实际上是在第一个故障迹象出现时停止其子actor,并在根监护人完全终止时将actor系统的isTerminated状态设置为true(所有子节点递归停止)
因为这意味着它是“泡沫之外的”,它被称为“泡沫行者”。这是一个合成ActorRef,它实际上是在第一个故障迹象出现时停止其子actor,并在根监护人完全终止时将actor系统的isTerminated状态设置为true(所有子节点递归停止)
在路径层次结构的根目录下,位于根监护人的位置上,可以找到所有其他actor;它的名称是"/",下一个级别包括以下内容:
......@@ -73,13 +73,13 @@ Akka实施了一种称为“父母监督”的特定形式。actor只能由其
### 监督策略
Akka有两类监督策略:OneForOneStrategy和AllForOneStrategy。这两种方法都配置了一个从异常类型到监督指令的映射,并限制了在终止它之前允许子程序失败的频率。
它们之间的区别是前者只对失败的子actor应用所获得的命令,而后者也将其应用于所有兄弟姐妹actor(同层的)。通常,您应该使用OneForOneStrategy,如果没有显式指定,这也是默认的。
它们之间的区别是前者只对失败的子actor应用所获得的命令,而后者也将其应用于所有兄弟姐妹actor(同层的)。通常,您应该使用OneForOneStrategy,如果没有显式指定,这也是默认的。
AllForOneStrategy适用于以下情况:儿童群体之间有非常紧密的依赖关系,一个孩子的失败将影响到其他儿童的功能,即他们之间有着不可分割的联系。
由于重新启动不会清除邮箱,所以通常最好是在失败时终止子节点,并从主管那里显式地重新创建它们(通过监视子程序的生命周期);否则,
由于重新启动不会清除邮箱,所以通常最好是在失败时终止子节点,并从主管那里显式地重新创建它们(通过监视子程序的生命周期);否则,
您必须确保任何actor能接收到重新启动之前排队的消息且随后处理都没有问题。
通常,使用“全对一”策略时,停止一个子程序(即不响应失败)不会自动终止其他子级的;这可以通过观察它们的生命周期来完成:如果终止的消息没有由主管处理,
通常,使用“全对一”策略时,停止一个子程序(即不响应失败)不会自动终止其他子级的;这可以通过观察它们的生命周期来完成:如果终止的消息没有由主管处理,
它将抛出DeathPactException,该异常(取决于其主管)将重新启动它,默认的preRestart操作将终止所有的子级。当然,这也可以显式地处理。
注意,从“一对一”管理者创建一次性actor意味着临时actor升级的失败将影响所有永久actor。如果不需要,请安装一个中间管理器;这可以通过为工作进程声明一个大小为1的路由器来完成。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册