检测Akka FSM

时间:2014-05-28 13:16:20

标签: scala akka fsm

我喜欢采用FSM所需的指标,直到达到某个状态。 我没有使用指标代码向我的类发送垃圾邮件,而是想添加一个特性来覆盖某些方法,并在调用该方法时发出消息。

例如:

trait InstrumentedActorFSM[S,D] extends Actor with FSM[S,D] {self: Actor with FSM[S,D] with Logging  =>
  startTimer // start measuring time here with Graphite

  override def stop = {
    stopTimerAndEmitMessage // emit message to graphite
    super.stop
  }
}

可悲的是,FSM中的所有方法都被声明为final,不能被覆盖。我可以使用Cake模式并将FSM重新实现所有调用,但感觉非常笨拙。有什么好主意吗?

1 个答案:

答案 0 :(得分:2)

您可以使用onTransition处理程序,如:

trait InstrumentedActorFSM[S,D] extends Actor with FSM[S,D] { ...

  onTransition {
    case _ -> SomeState => stopTimerAndEmitMessage
  }

}