是在Akka FSM中内部监视到第一个状态的转换的一种方法



考虑一个FSM参与者在空闲状态启动

startWith(Idle, IdleData)

我想监视到第一个状态的转换(从无状态?)

我试着

onTransition {
    case _ -> Idle => // Wasn't called
}

根据FSM相关文件:

也可以将接受两种状态的函数对象传递给如果您的转换处理逻辑被实现为方法:

onTransition(handler _)
def handler(from: StateType, to: StateType) {
  // handle it here ...
}

鉴于from类型是StateType而不是Option[StateType],我认为这可能是不可能的,但也许我错过了一些东西。

我最近也在找类似的东西。

如果我对你的问题理解正确的话,这里有一种方法可以监控你从初始状态启动FSM的时间:

class ExampleFSM extends Actor with FSM[State, Data] {
  // A FSM begins its existence in Idle state and can move to different states
  startWith(Idle, NoData)
  when(Idle) {
    case Event(SetData(something), NoData) =>
      goto(SomeOtherState) using Data(something)
  }
  onTransition {
    case Idle -> Idle =>
      stateData match {
        case _ =>
          println("Initial transition")
      }
  }
}

在上面的例子中,当我们实例化FSM传入消息SetData(something)时,它从状态Idle开始,并且有一个可以监视的转换是Idle -> Idle

在上面的情况下,当我们启动FSM时,我们可以看到输出Initial transition打印,您可以根据需要利用它来做更复杂的事情

所以基本上如果你将现有的转换从case _ => Idle更新到case Idle -> Idle它应该可以工作

注意:可能有不止一种方法可以做到这一点,我也仍然在探索Akka FSM的力量,所以我的答案只是有一种可能的方法得到这个

最新更新