首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Actor SupervisorStrategy:处理特定子Actor的异常

Actor SupervisorStrategy是Akka框架中的一个重要概念,用于处理特定子Actor的异常。在Akka中,Actor是并发编程模型的基本单位,而SupervisorStrategy则是用于管理和监控Actor的异常情况。

SupervisorStrategy定义了当子Actor抛出异常时,父Actor应该如何处理这些异常。它提供了一种机制,使得父Actor能够根据不同的异常情况采取不同的处理策略,从而保证系统的可靠性和容错性。

SupervisorStrategy可以根据异常的类型、数量和频率等因素来决定如何处理异常。常见的处理策略包括:

  1. 停止(Stop):停止异常的子Actor,并将异常向上抛出,由上级Actor处理。
  2. 重启(Restart):重启异常的子Actor,使其恢复到初始状态,并继续处理消息。
  3. 继续(Resume):忽略异常,继续处理下一个消息。
  4. 重试(Escalate):将异常向上抛出,由上级Actor处理。

Actor SupervisorStrategy的设计目标是提供一种容错机制,使得系统能够在出现异常时自动恢复,并保持可靠性。通过合理配置SupervisorStrategy,可以有效地处理子Actor的异常,提高系统的稳定性和可靠性。

在腾讯云的产品中,与Actor SupervisorStrategy相关的产品是腾讯云的Serverless Cloud Function(SCF)。SCF是一种无服务器计算服务,可以帮助开发者快速构建和部署事件驱动型的应用程序。通过SCF,开发者可以将业务逻辑封装为函数,并由SCF自动管理函数的运行环境和资源分配。在SCF中,可以通过配置异常处理策略来处理函数执行过程中的异常情况,实现容错和自动恢复。

更多关于腾讯云Serverless Cloud Function的信息,请参考腾讯云官方文档:Serverless Cloud Function

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Akka(2):Actor生命周期管理 - 监控和监视

父级Actor对发生异常子级Actor有以下几种处理方式: 1、恢复运算(Resume):不必理会异常,保留当前状态,跳过当前异常消息,照常继续处理其它消息 2、重新启动(Restart):清除当前状态...按照规定,父级会将自己和子级Actor运算暂停挂起并把子级Actor实际产生异常当作自己发生异常提交给上一层父级处理(也就是说异常信息发送者sender变成了父级Actor)。...Akka处理异常方式简单直接:如果发生异常就先暂停挂起然后交给直属父级Actor处理。这就把异常封闭在这个Actor监管链条里。...它直属父级Actor会按自己异常处理策略来对待提交上来异常处理结果将会递归式沿着监管树影响属下所有子子孙孙。...那如果需要重新处理造成异常消息又怎么办呢?看来只好试试SupervisorStrategy了。

2.3K80

Akka 指南 之「容错」

中所解释,每个 Actor 都是其子级监督者,因此每个 Actor 定义了故障处理监督策略。...; } 我们选择了一些众所周知异常类型,以演示在「supervision」中描述故障处理指令应用。...如果没有为 Actor 定义监督策略,则默认情况下会处理以下异常: ActorInitializationException将停止失败Actor ActorKilledException将停止失败子...记录 Actor 失败 默认情况下,除非升级,否则SupervisorStrategy会记录故障。升级故障应该在层次结构中更高级别处理并记录下来。...Actor 进行监督,它具有在所有异常情况下重新启动默认策略(ActorInitializationException和ActorKilledException显著异常)。

85030

Akka(3): Actor监管 - 细述BackoffSupervisor

在上一篇讨论中我们谈到了监管:在Akka中就是一种直属父子监管树结构,父级Actor负责处理直属子级Actor产生异常。...当时我们把BackoffSupervisor作为父子监管方式其中一种。实际上BackoffSupervisor与定义了supervisorStrategyActor有所不同。...BackoffSupervisor是这样处理下面几个特殊消息: private[akka] trait HandleBackoff { this: Actor ⇒ def childProps:...在构建上面例子里SupervisorProps时定义了监管策略(SupervisorStrategy)对InnerChild产生异常ChildException进行Restart处理。...下面我们来解决失踪消息问题:首先是如何重新发送造成异常消息,我们可以在监管策略中重启前发送: def decider: PartialFunction[Throwable, SupervisorStrategy.Directive

85060

Akka(4): Routers - 智能任务分配

Actor模式最大优点就是每个Actor都是一个独立任务运算器。这种模式让我们很方便地把一项大型任务分割成若干细小任务然后分配给不同Actor去完成。...在上面修改后代码里增加了监管策略SupervisorStrategy使用测试。Router默认监管策略是Esculate,即把某个Routee发生异常提交给Router直属父级处理。...如果Router直属父级对Routee异常处理方式是重启的话,那么首先重启Router,然后是作为直属子级所有Routees都会被重启,结果并不是我们想要。...接口中增加了向自己补发产生异常消息过程。...运算结果显示:虽然出现了多次异常,router重启了f发生异常Routee,所有消息都得到了处理。 Akka中有些routing模式支持Router-Pool Routee自动增减。

95750

Akka(11): 分布式运算:集群-均衡负载

集群构建是ActorSystem层面上,可以是纯粹配置和部署行为;分布式Actor程序编程实现了Actor消息地址透明化,无须考虑目标运行环境是否分布式,可以按正常Actor编程模式进行。  ...既然分布式Actor编程无须特别针对集群环境,那么摆在我们面前就是多个可以直接使用运算环境(集群节点)了,现在我们分布式编程方式应该主要聚焦在如何充分使用这些分布运算环境,即:如何把程序合理分配到各集群节点以达到最优运算输出效率...这点需要后台节点Node在加人集群时向前端负责分配任务Actor报备自己ActorRef。前端Actor是通过一个后台报备ActorRef清单来分配任务。...是带监管,可以自动处理异常。...为了方便表达,我把所有功能都集中在CalcFunctions一个Actor里。在实际情况下应该分成四个不同Actor,因为它们会被部署到不同集群节点上。

2.2K70

Akka(25): Stream:对接外部系统-Integration

说到与Actor集成,联想到如果能把akka-stream中复杂又消耗资源运算任务交付给Actor,那么我们就可以充分利用actor模式routing,cluster,supervison等等特殊功能来实现分布式高效安全运算...、StorageActor生命周期callback来跟踪异常发生时SupervisorStrategy.Restart执行情况。...Backoff.onFailure是在Actor出现异常终止触动,而Backoff.onStop则是目标Actor在任何情况下终止后触发。...值得注意是,在以上例子里运算Actor会越过造成异常这个流元素,所以我们必须在preRestart里把这个元素补发给自己: //验证异常重启 //BackoffStrategy.onStop...这个Actor只返回backpressure消息ackMessage,而不是返回任何运算结果。注意,在preRestart里我们把造成异常元素处理后再补发给了自己。

2K80

Akka(13): 分布式运算:Cluster-Sharding-运算集群分片

还有一种情况就是如果有许多特别占用资源Actor需要同时运行,而这些Actor同时占用资源远远超过一台服务器容量,如此我们必须把这些Actor分布到多台服务器上,或者是一个由多台服务器组成集群环境...我把通过使用Cluster-Sharding后达到一些目的和大家分享一下,大家一起来分析分析到底这些达成目标里是否包括了Actor在集群节点间分布: 首先我有个Actor,它名称是一个自编码,由...如果我有许多自编码消耗资源Actor,我可以通过自编码中分片(shard)编号来指定在其它分片(shard)里构建这些Actor。...CalcSupervisor是Calculator监管,这样做是为了实现新监管策略SupervisorStrategy。...由于每个分片只含一种类型Actor,不同entity-id代表多个同类Actor实例同时存在,就像前面讨论Router一样:所有实例针对不同输入进行相同功能运算处理

1.4K80

akka-typed(0) - typed-actor, typed messages

所以,这个actor必须包括所有的业务逻辑处理运算。也就是说对于一个大型应用来说这就是一块巨型代码。...现在这个新中台可以实现前台应用直接调用对应actor处理业务了。不用多想了,这注定就是akka应用将来,还等什么呢? 先从一个最简单hello程序开始吧:基本上是两个actor相互交换消息。...特别的是类型参数Behavior[Greeting],代表这个actor处理Greeting类型消息,因而是个typed-actor。...再就是增加了BackOff-SupervisorStrategy,不需要独立BackOffSupervisor actor了。...值得注意是Greeter负责处理Greeted消息,这是一个不带sender ActorRef类型,意味着处理这类消息后不需要答复消息发送者。

53330

Akka 指南 之「监督和监控」

所有其他可抛异常事件都会升级,这将关闭整个 Actor 系统。...所有其他可抛(throwables)异常都会升级……但是给谁?因为每个真正 Actor 都有一个监督者,所以根守护者监督者不能是真正 Actor。...当与处理特定消息时失败 Actor 一起出现时,失败原因分为三类: 接收到特定系统性(即编程)错误消息 处理消息过程中使用某些外部资源出现故障 Actor 内部状态已损坏 除非能明确识别故障,...然后,新 Actor 将继续处理其邮箱,这意味着重新启动在 Actor 除本身之外是不可见,但有一个明显例外,即发生故障消息不会被重新处理。...它还使用默认停止策略,任何异常都会导致子 Actor 停止。

1K20

Akka 指南 之「集群分片」

EntityEnvelope包含标识符,发送给实体 Actor 实际消息包装在信封中。 注意这两种消息类型是如何在上面展示entityId和entityMessage方法中处理。...SC回答S1位置是SR1。 R1为实体E1创建子 Actor,并将S1缓冲消息发送给E1子 Actor。 到达R1S1所有传入消息都可以由R1处理,而不需要SC。...SC回答S2位置是SR2。 SR1将S2缓冲消息发送到SR2。 到达SR1S2所有传入消息都可以由SR1处理,而不需要SC。它将消息转发到SR2。...shardIdExtractor处理Shard.StartEntity(EntityId),可以使每个Shard中实体列表持久化,这意味着ShardId必须可以从EntityId中提取。...监督 如果需要为实体 Actor 使用其他supervisorStrategy,而不是默认(重新启动)策略,则需要创建一个中间父 Actor,该 Actor 定义子实体 Actor supervisorStrategy

2.2K61

akka-typed(6) - cluster:group router, cluster-load-balancing

就是说任何节点上actor都可以在Receptonist上注册形成一个生存在集群中不同节点actor清单。...那么获取清单内应该全部是一种类型actor,只不过它们地址可能是跨节点,但它们只能进行同一种运算。从另一个角度说,一项任务是分布在不同节点actor并行进行运算。...在上篇讨论里提过:如果发布-订阅机制是在两个actor之间进行,那么这两个actor也需要在规定信息交流协议框架下作业:我们必须注意消息类型,提供必要消息类型转换机制。...注意TransformTextreplyTo: ActorRef[TextTransformed],代表sender是个可以处理TextTransformed消息类型actor。...那么发送给Receptionist消息中replyTo必须是发送者能处理类型,如下: def apply(): Behavior[Event] = Behaviors.setup { ctx =

75420

Akka-Cluster(5)- load-balancing with backoff-supervised stateless computation - 无状态任务集群节点均衡分配

由于承担运算任务目标actor具体部署位置是由算法决定,所以我们一般不需要控制指定actor或者读取它内部状态。当然,如果需要的话我们还是可以通过嵌入消息方式来实现这样功能。  ...假如我们把一个大型数据处理程序分割成多个独立数据库操作。...为了保证每项操作都能在任何情况下安全进行,包括出现异常,我们可以用BackoffSupervisor来支持负责操作actor,如下: val supervisor = BackoffSupervisor.props...发生异常,采用SupervisorStrategy异常处理方式。...发生异常时重新构建新实例并启动。 很明显,通常我们需要在运算发生异常时重新启动运算,所以用OnFailure才是正确选择。

1.4K20

聊聊Akka

异步非阻塞:Akka-Actor消息通信都是基于异步非阻塞。 高容错性:为跨多JVM分布式模型提供强劲容错处理,号称永不宕机。...使用场景包括: 服务后端,比如rest web,websocket服务,分布式消息处理等。 并发&并行,比如日志异步处理,密集数据计算等。 总之,对高并发和密集计算系统,Akka都是适用!...在Akka中,每个Actor都有自己监管对象,即该Actor创建者,它们通常会负责子Actor失败处理,另外,某些Actor也需要对生命周期进行监控(比如该Actor终止),以便及时响应并作正确处理...行为(Behavior) Actor都有接收和发送消息能力,每当它接收到一个消息后,就可以执行某个业务操作,同时也可以把消息转发到其他节点进行处理。...监管策略(SupervisorStrategy) Actor系统是一个层级结构,当任务被某个Actor分摊到子Actor时,父Actor就拥有监管子Actor义务。

2K30

Akka 指南 之「Actors」

重新启动涉及上述挂钩: 通过调用导致preRestart异常和触发该异常消息来通知旧 Actor ;如果重新启动不是由处理消息引起,则后者可能为None,例如,当监督者不捕获异常并由其监督者依次重新启动时...Actor 重新启动仅替换实际 Actor 对象;邮箱内容不受重新启动影响,因此在postRestart钩子返回后,将继续处理消息,而且将不再接收触发异常消息。...警告:要完成带异常,你需要向发件人发送akka.actor.Status.Failure消息。当 Actor处理消息时抛出异常,不会自动执行此操作。...Actor异常Actor 处理消息时,可能会引发某种异常,例如数据库异常。 消息发生了什么 如果在处理邮件时引发异常(即从邮箱中取出并移交给当前行为),则此邮件将丢失。...重要是要知道它不会放回邮箱。因此,如果你想重试处理消息,你需要自己处理它,捕获异常并重试处理流程(retry your flow)。

4K30

我们技术实践

主要用于处理前端发来数据分析消息,相当于一个dispatcher,也承担了部分消息处理职责,例如对消息包含元数据进行解析,生成SQL语句,用以发送给SparkSqlContext。...产品需要支持多种数据源,不同数据源处理逻辑放到不同模块中,我们利用actor来解耦 以下是为AKKAActorRefFactory定义工厂方法: ?...通过向自定义工厂方法actorOf()传入Actor名称来创建Actor: ?...注意actorsender不能离开当前ActorContext 采用类似Template Method模式方式去扩展Actor ? 或者以类似Decorator模式扩展Actor ?...考虑建立符合项目要求SupervisorStrategy 尽量利用actor之间协作来传递消息,这样就可以尽量使用tell而不是ask Spark SQL技术实践 目前产品特性还未用到更高级

1.2K50
领券