Akka 学习(六)Actor的监督机制

news2024/11/20 12:30:28

目录

  • 一 监督机制
    • 1.1 错误隔离性
    • 1.2 系统冗余性
    • 1.3 Actor的监督
      • 1.3.1 监督体系
      • 1.3.2 理解
      • 1,3.3 监督策越

一 监督机制

1.1 错误隔离性

  • 在学习Akka如何对失败情况进行响应之前,先了解一些在分布式应用程序中都应该遵循的通用策略:隔离错误。
  • 假设每个组件都是一个定时炸弹,那么我们希望能够确保无论其中任何一个发生爆炸,都不会引发链式反应,导致其他组件也爆炸。
  • 也可以说,我们希望能够隔离错误,或是将可能引发失败情况的组件分离开来。

1.2 系统冗余性

  • broker通常用于在不停止系统的前提下添加新的服务节点或是关闭某个服务节点。
  • 服务会连接到broker,从消息队列中获取并处理消息,JMS和RabbitMQ就是broker的例子。

1.3 Actor的监督

  • Erlang将容错性引入了Actor模型,它使用的概念叫做监督(supervision)监督的核心思想就是把对于失败的响应和可能引起失败的组件分隔开,并且把可能发生错误的组件通过层级结构来组织,以便管理。

1.3.1 监督体系

  • Akka使用Actor层级结构来描述监督,当我们创建Actor时,新建的Actor都是作为另一个Actor的子Actor,父Actor负责监督子Actor。
  • Actor的路径结构就展示了它的层级结构,所以和文件系统中的文件夹有点像。
  • 位于Actor层级结构顶部的是路径为/的根Actor。然后是路径为/user的守护Actor。
  • 使用actorSystem.actorOf()函数创建的所有Actor都是守护Actor的子Actor(/user/yourActor)。
  • 如果在一个Actor内部创建另一个Actor,那么可以通过调用context().actorOf使得新建的Actor成为原Actor的子Actor,这个新建的Actor就成为了Actor树结构中的下一个叶节点(/user/yourActor/newChild)。
  • 根Actor下面还有其他Actor层级结构,系统操作相关的Actor在路径为/system的系统守护Actor下面。
  • 路径/temp下面还包含了一个临时的Actor层级结构,用于完成Future的临时Actor就处于这个子树中。我们并不需要对这些细节担心过多,这些基本上都是Akka的内部实现,对于开发者是不可见的。

1.3.2 理解

我们将通过一个例子来帮助理解监督策略。假设寿司师很喜欢喝酒。他喝了酒以后经常给自己惹麻烦,所以此时他的经理必需要采取一些措施。经理可以选择一些不同的做法。

● 继续(resume):Actor继续处理下一条消息;
● 停止(stop):停止Actor,不再做任何操作;
● 重启(restart):新建一个Actor,代替原来的Actor;
● 向上反映(escalate):将异常信息传递给下一个监督者。

  1. 假设表示寿司师的Actor必需要制作寿司,他非常熟练,每做完一盘寿司,都要喝一杯酒来庆祝一下自己的杰作,服务员把客人点的菜单叠起来交给寿司师,寿司师就不断地制作寿司并喝酒,如果寿司师从早忙到晚的话,最后就无法处在最佳工作状态了(说得轻一点)。
  2. 如果寿司师犯了一个错误(比如说切到了自己的手指或是掉了一个盘子),那么这可能是可以接受的,监督者将告诉寿司师在这种情况下resume()。
  3. 一旦寿司师喝醉了,做了一盘巨丑无比的寿司,开始让一些客人不满了,那么经理(寿司师的监督者)就要负责对这种异常情况进行响应了,经理要说明寿司师喝醉了,并且把他辞退了,监督者请来另一个寿司师,接着根据下一个要做的菜单制作寿司,送走原来的寿司师,引进一个新寿司师的过程就相当于重启。
  4. 新来的寿司师比较年轻,忍不住也喝了起来。他彻底喝醉了,还打翻了一支蜡烛,餐厅着火了,经理处理不了这个错误——单单辞退喝醉的寿司师,再新请一个师傅可灭不了火!经理给他的监督者(餐厅老板)打电话,告诉他需要关门并且马上报警,这就是向上反映,此时经理的上级(饭店老板)就需要做决定。如果把异常向上反映给了守护Actor,那么就会关闭应用程序。

1,3.3 监督策越

Actor有默认的监督策略。如果没有修改监督策略,那么监督Actor的行为基本上和喝醉的寿司师例子中一样:
● Actor运行过程中抛出异常:restart();
● Actor运行过程中发生错误:escalate();
● Actor初始化过程中发生异常:stop()。
在默认监督策略中还定义了另一种情况:ActorKilledException,如果Actor被“杀”(kill)了,那么这个Actor的监督者会接收到一个ActorKilledException,执行stop()会接收到该异常。

@Override
    public akka.actor.SupervisorStrategy supervisorStrategy() {
    return new OneForOneStrategy(5, Duration.create("1 minute"),
                                 akka.japi.pf.DeciderBuilder
                                 // 打破盘子
                                 .match(BrokenPlateException.class,
                                        e -> SupervisorStrategy.resume())
                                 // 喝醉了
                                 .match(DrunkenFoolException.class,
                                        e -> SupervisorStrategy.restart())
                                 // 发生火灾
                                 .match(RestaurantFireError.class,
                                        e -> SupervisorStrategy.escalate())
                                 // 需要停业,整顿
                                 .match(TiredChefException.class,
                                        e -> SupervisorStrategy.stop())
                                 .matchAny(e -> SupervisorStrategy.escalate())
                                 .build()
                                );
}

要注意的是,一般情况下使用默认的行为就可以了:如果Actor在运行中抛出异常,就重启Actor;如果发生错误,就向上反映或是关闭应用程序。不过如果Actor在构造函数中抛出异常,那么会导致ActorInitializationException,并最终导致Actor停止运行。因为在这种情况下应用程序不会继续运行,所以要对此特别注意。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【刷题-数组篇】狂刷力扣三十题,“数组”嘎嘎乱写 | 2022 12-5到12-9

前言 (12月5日)突然想起了很久以前别人(具体来源已经记不清了)传给我的一套题单。网上的题单不少,光收藏可不行,关键还得下手。 这套题单的题目数量为300出头,什么时候刷完我还没有明确计划&a…

web前端大作业 (仿英雄联盟网站制作HTML+CSS+JavaScript) 学生dreamweaver网页设计作业

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

2.IOC之xml配置

1.使用IDEA创建工程 2.引入项目使用的依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency> </depe…

英文外链代发怎么做有效果?英文外链购买平台

英文外链代发怎么做有效果&#xff1f; 答案是&#xff1a;选择权重较好的GPB外链 我们首先要知道一个观点&#xff0c;什么样的外链才有效果&#xff1f; 1.英文外链网站的有一定的权重&#xff0c;可高可低&#xff0c;但一定要有权重&#xff0c;数值指标可以参考MOZ的Do…

10.AOP之xml配置

1.使用IDEA创建工程 2.引入项目使用的依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency><depend…

HPPH偶联无机纳米材料/白蛋白/白蛋白纳米粒/抗体/量子点/活性基团/荧光/细胞膜的研究

小编分享了HPPH偶联无机纳米材料/白蛋白/白蛋白纳米粒/抗体/量子点/活性基团/荧光/细胞膜的研究知识&#xff0c;一起来看&#xff01; HPPH偶联无机纳米材料/白蛋白纳米粒的研究&#xff1a; HPPH 具有的光动力活性的作用光谱以及靶向性&#xff0c;对组织的穿透率&#xff0…

Android基础学习(十九)—— 进程与线程

1、进程 程序和进程的区别&#xff1a;&#xff08;1&#xff09;程序是静态的&#xff0c;就是存放在磁盘里的可执行文件&#xff0c;就是一系列的指令集合&#xff1b;&#xff08;2&#xff09;进程是动态的&#xff0c;是程序的一次执行过程&#xff0c;同一程序多次执行会…

物联网开发笔记(58)- 使用Micropython开发ESP32开发板之控制2.90寸电子墨水屏模块

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制2.90寸电子墨水屏模块。 二、环境 ESP32 2.90寸 电子墨水屏模块 Thonny IDE 几根杜邦线 接线方法&#xff1a; 三、墨水屏驱动 此处注意注意&#xff1a;不同的型号、不同厂家的墨水屏驱动方式有些不同&#xff0c;…

VIIF:自监督:自适应:GAN

Self-supervised feature adaption for infrared and visible image fusion &#xff08;红外和可见光图像融合的自监督特征自适应&#xff09; 总述&#xff1a;首先&#xff0c;我们采用编码器网络来提取自适应特征。然后&#xff0c;利用两个具有注意机制块的解码器以自我…

【扫描PDF】如何将颜色淡的扫描PDF颜色变深,便于阅读??PDF中文字太淡怎么加深?汇总网上已有的方法,一波小结

一、问题背景 如果你扫描得到的PDF&#xff0c;像下图一样文字颜色非常淡&#xff0c;看起来不舒服&#xff0c;需要加深处理&#xff0c;就烦请看我下面的几个解决方法&#xff0c;都是从网上汇总得到&#xff0c;加上自己的实践和体会总结。 二、Adobe Acrobat DC PDF扫描…

20221209英语学习

今日新词&#xff1a; receiver n.收受者; 收件人; 接待者; (电话)听筒, 耳机; 收音机; (电视)接收机; 接收器; 接球手 annoy n.同“annoyance” delight n.快乐&#xff0c;愉快 railroad n.铁路, 铁道, 铁路公司, 铁路系统 brilliance n.光辉, 【光】辉度, 漂亮, (名声)…

3.IOC之注解配置

1.编写Spring框架核心配置文件applicationContext.xml 在项目目录“/src/main/resources”下新建applicationContext.xml文件&#xff0c;具体代码如下。 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework…

Google如何增加外链?谷歌外链自动化靠谱吗?

Google如何增加外链&#xff1f; 答案是&#xff1a;循序渐进增加免费开放性注册的外链和GPB外链 我们在发布Google外链的时候&#xff0c;总想找捷径&#xff0c;通过软件工具自动发布外链来提高网站排名和流量&#xff0c;加快SEO优化进度&#xff0c;缩短时间成本&#xf…

ChatGPT:构建与人类聊天一样自然的机器人

ChatGPT&#xff1a;构建与人类聊天一样自然的机器人 —— ChatGPT 文章目录ChatGPT&#xff1a;构建与人类聊天一样自然的机器人 —— ChatGPT1 官网2 注册OpenAI账号3 使用ChatGPT3.1 普通聊天3.2 生成代码3.3 写诗3.4 解一道算法题4 ChatGPT中文版VsCode 插件5 一些体会Hi&a…

浅析即时通讯开发之RTMP数据传输协议的实时流媒体

近年来,随着网络带宽的提升,以及多媒体压缩编码技术的发展,流媒体技术得到了非常广泛的应用。全球的流媒体市场正在以极高的速度向前发展,并逐步取代了以文本和图片为主的传统互联网。根据Cisco的VisualNetworkingIndex(VNI)统计,2005年流媒体流量仅占全球互联网总流量的5%,而到…

【玩转c++】c++模板和泛型编程

本期主题&#xff1a;c模板和泛型编程博客主页&#xff1a;小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限&#xff0c;出现错误希望大家不吝赐身为程序员&#xff0c;不会有人没女朋友吧&#xff01;&#xff01; 目录 &#x1f341;1.泛型编程 &#x…

ChatGPT 是何方神圣?为什么这么猛?

哈喽&#xff0c;大家好&#xff0c;我是木易巷&#xff01; 本篇文章给大家介绍一下这个很猛的玩意&#xff1a;ChatGPT &#xff01;&#xff01;&#xff01; 什么是ChatGPT &#xff1f; 在12月初&#xff0c;人工智能实验室OpenAI发布了一款名为ChatGPT的自然语言生成式…

【Pytorch】第 5 章 :解决多臂老虎机问题

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

web期末网站设计大作业 HTML+CSS+JS仿爱奇艺官网影视网站

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

《Linux运维实战:使用Percona Backup for MongoDB物理备份与恢复Mongodb数据》

一、备份与恢复方案 Percona Server for MongoDB Percona Server for MongoDB是一个免费的、增强的、完全兼容的、源代码可用的、带有企业级功能的MongoDB Community Edition的替代品。它不需要对MongoDB应用程序或代码进行更改。 参考官方&#xff1a;Percona Backup for Mon…