我喜欢采用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重新实现所有调用,但感觉非常笨拙。有什么好主意吗?
答案 0 :(得分:2)
您可以使用onTransition处理程序,如:
trait InstrumentedActorFSM[S,D] extends Actor with FSM[S,D] { ...
onTransition {
case _ -> SomeState => stopTimerAndEmitMessage
}
}