Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Cs Summary Reflection
提交
3881b068
C
Cs Summary Reflection
项目概览
梦境迷离
/
Cs Summary Reflection
大约 1 年 前同步成功
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cs Summary Reflection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3881b068
编写于
11月 05, 2019
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix 符号,时间:2019-11-05 22:40:53
上级
c1d970b9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
8 addition
and
8 deletion
+8
-8
docs/_posts/2019-10-14-Akka-Actor的监督与监控.md
docs/_posts/2019-10-14-Akka-Actor的监督与监控.md
+8
-8
未找到文件。
docs/_posts/2019-10-14-Akka-Actor的监督与监控.md
浏览文件 @
3881b068
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录