我喜欢采取一个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被宣布为最终的所有方法都不能被覆盖。我可以求助于Cake模式,并嵌入一个FSM,重新实现所有调用,但这感觉相当笨拙。有什么好主意吗?
发布于 2014-05-28 13:53:11
您可以使用onTransition处理程序,例如:
trait InstrumentedActorFSM[S,D] extends Actor with FSM[S,D] { ...
onTransition {
case _ -> SomeState => stopTimerAndEmitMessage
}
}https://stackoverflow.com/questions/23912695
复制相似问题