Akka - 是否有可能在演员的主管中获得消息?

bon*_*ash 5 scala actor akka

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

par*_*tic 4

一种可能的方法:

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

例如:

// 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
  }
Run Code Online (Sandbox Code Playgroud)

  • 是的,我可以做到这一点,但我可以从受监督演员的 catch 块将失败消息发送给主管。我想按照“Akka in Action”中的建议摆脱受监督演员的 try & catch (2认同)