首页
学习
活动
专区
工具
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.5K80

Akka 指南 之「容错」

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

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

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

    90760

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

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

    1K50

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

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

    2.3K70

    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里我们把造成异常的元素处理后再补发给了自己。

    2.1K80

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

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

    1.5K80

    Akka 指南 之「监督和监控」

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

    1.1K20

    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的类型,意味着处理这类消息后不需要答复消息发送者。

    56830

    Akka 指南 之「集群分片」

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

    2.3K61

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

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

    78620

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

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

    1.5K20

    聊聊Akka

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

    2.2K30

    Akka 指南 之「Actors」

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

    4.2K30

    我们的技术实践

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

    1.2K50
    领券