scala - Akka - 是否有可能在 Actor 的主管中收到有关它失败的消息?

标签 scala akka actor

有没有办法在 Actor 主管的 SupervisorStrategy 中获取消息?我的意思是导致 Actor 失败的那个。我想从中获取一些数据。

最佳答案

一种可能的方法:

  • 定义一个新的运行时异常异常类,能够封装错误消息。
  • 在监督 Actor 。捕获异常并抛出上面定义的带有错误消息的异常。
  • 在主管策略中,捕获新的异常类型并访问消息。

  • 例如:
    // The new exception type
    case class MessageException( 
      akkaMessage: Any, 
      originalException: Throwable 
    ) extends RuntimeException("Exception due to message")
    
    // In the supervised actor
    def receive = {
      case msg => try{ process(msg) } catch { 
        case t => throw MessageException(msg,t) 
      }
    }
    
    // In the supervisor
    override val supervisorStrategy =
      OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
         case MessageException(msg,t) => //decide what to do
      }
    

    关于scala - Akka - 是否有可能在 Actor 的主管中收到有关它失败的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142123/

    相关文章:

    java - 将 java lambda 谓词移植到 scala

    scala - Scala 3 中的类型模式匹配和推理错误

    java - 如何确定 Akka actor/supervisor 层次结构?

    java - akka 中每个主机的最大 Actor 数

    actor - 我的 Akka Actor 的属性是否应该标记为 @volatile?

    scala - Akka 2 中调度程序的区别和使用模式有哪些?

    scala - 如何从提示符启动Scala

    scala - 为什么在 Scala 中压缩比 zip 快?

    scala - 这与 akka Actor 类中的 self

    scala - 异常后恢复之前的 actor 状态