美文网首页
Akka监控策略

Akka监控策略

作者: lj72808up | 来源:发表于2019-10-30 12:37 被阅读0次

一. 创建一个监控策略

  1. 策略的选择

    • one-for-one strategy: 每个actor被单独处理
    • all-for-one strategy: 任何监控动作都作用于被其监控的所有actor
  2. 策略的动作是一个偏函数
    这个偏函数是PartialFunction[Throwable, Directive]; 其参数是Throwable, 输出是Directive

    • 自定义一个策略
    import akka.actor.OneForOneStrategy
    import akka.actor.SupervisorStrategy._
    import scala.concurrent.duration._
    
    override val supervisorStrategy =
    // 下面的2个参数表示: 如果1个actor在1分钟之内重启次数超过10次, 该actor就会被停止
    OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
        case _: ArithmeticException      => Resume
        case _: NullPointerException     => Restart
        case _: IllegalArgumentException => Stop
        case _: Exception                => Escalate  // 对于策略无法覆盖到的异常, 可以使用默认的
    }
    
    • maxNrOfRetries与withinTimeRange的解释
      • maxNrOfRetries=-1, withinTimeRange=Duration.Inf: 表示无限制的重启子actor
      • maxNrOfRetries=-1, withinTimeRange=非无限的一个时间段: 按照maxNrOfRetries= 1处理
      • maxNrOfRetries=1个非负数, withinTimeRange=Duration.Inf: 表示子actor只要重启次数超过maxNrOfRetries, 则子actor就会被停止
  3. 默认监控策略

    • Escalate用于当actorref抛出策略未覆盖到的异常时, 采取的默认方法;
      默认情况下, 父actor会重启子actor
    • 默认的监控策略为akka.actor.DefaultSupervisorStrategy
      是一个OneForOneStrategy, 其偏函数定义为若策略未对以下异常做出声明, 则采用默认行为:
      • ActorInitializationException will stop the failing child actor
      • ActorKilledException will stop the failing child actor
      • DeathPactException will stop the failing child actor
      • Exception will restart the failing child actor
      • Other types of Throwable will be escalated to parent actor
    • 可以组合自己的监控策略和已有的监控策略:
      import akka.actor.OneForOneStrategy
      import akka.actor.SupervisorStrategy._
      import scala.concurrent.duration._
      
      override val supervisorStrategy =
      OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
          case _: ArithmeticException => Resume
          case t =>
          super.supervisorStrategy.decider.applyOrElse(t, (_: Any) => Escalate)
      }
      

二. 顶级Actor的监控策略

顶级actor是使用system.actorOf()创建的actor, 是被/user守卫的; 这些actor的监控策略使用配置的策略

三. actor的生命周期

上图是官网中, 关于actor生命周期的展现:

  1. actor是一个有状态的资源, 需要被显式的start和stop
    关闭一个父actor, 会递归的关闭其创建的所有子actor; 同样, 停止一个actorsystem, 也会停止下面的所有actor
  2. 重启一个actor, 其关联的子actor也会重启
  3. actor是被path一个uid唯一标识的
  4. 对于Restart的监控做法, preRestart在老actor上调用, postRestart在新actor上调用

Demo: https://github.com/lj72808up/Codes/blob/master/Actor_Demo/src/main/scala/com/test/TestSupervisor.scala

相关文章

  • Akka监控策略

    一. 创建一个监控策略 策略的选择one-for-one strategy: 每个actor被单独处理all-fo...

  • Akka——监管与监控

    监管的意思 监管描述的是actor之间的依赖关系:监管者将任务委托给下属,并相应地对下属的失败状况进行响应。当一个...

  • Akka的监管和监控

    Akka的监管和监控 监管和监控 在 Actor 系统 中说过,监管描述的是actor之间的依赖关系:监管者将任务...

  • Akka Actor监管策略

    Supervisor Akka中每个Actor都是在其他的Actor中创建,换句话说:每个Actor都存在于它父亲...

  • [ANR监控] 用StrictMode进行线下监控

    ANR的监控策略,可以分为线上和线下。线上的监控方案,需要充分考虑性能问题,所以很多监控策略不能使用。但是线下监控...

  • 学习的思路

    一、学习策略1、策略必须在执行之前明确好。2、策略通过随时监控的方式随时调整,方法是“每日监控及记录应用某种策略并...

  • 监控策略的教学实践

    好的监控策略不是死记硬背,学生不紧紧吸住策略操作的步骤和机械地执行这些步骤监控策略教学更不是简单反复的操作好的监控...

  • Akka手册译(一)——配置(2)

    akka-cluster akka-multi-node-testkit akka-persistence

  • Akka手册译(一)——配置(3)

    akka-remote akka-remote (artery) akka-testkit 1.#########...

  • Akka手册译(一)——配置(4)

    akka-cluster-metrics akka-cluster-tools akka-cluster-shar...

网友评论

      本文标题:Akka监控策略

      本文链接:https://www.haomeiwen.com/subject/gprovctx.html