阿卡 - 是否有可能在演员的主管那里得到消息呢?

时间:2014-03-03 08:42:47

标签: scala akka actor

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

1 个答案:

答案 0 :(得分:4)

可能的方法:

  1. 定义一个能够封装错误消息的新运行时异常异常类。
  2. 在受监督的演员中。捕获异常并使用错误消息抛出上面定义的异常。
  3. 在主管策略中,捕获新的异常类型并访问该消息。
  4. 例如:

    // 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
      }