在 Akka FSM 中覆盖 `receive` 是否安全?
Is it safe to override `receive` in an Akka FSM?
我用 Akka 创建了一个 FSM。但是,我的 FSM 不仅会传递与其 FSM 状态相关的消息。它的 children 也可能将 ActorRef
传递给它,然后我的 FSM 应该进一步传递给它的 parent。由于 Akka 中的 FSM(自然地)也是演员,我想覆盖 receive
来捕捉那些 ActorRefs
。但是,这样做会破坏 actor 的 FSM 功能。处理这种情况的正确方法是什么?
与任何 FSM 状态无关的消息可以在 whenUnhandled
中处理:
whenUnhandled {
case Event(someActorRef: ActorRef, _) =>
context.parent ! someActorRef
stay()
}
不过,据我所知,覆盖 receive
也应该有效。
我用 Akka 创建了一个 FSM。但是,我的 FSM 不仅会传递与其 FSM 状态相关的消息。它的 children 也可能将 ActorRef
传递给它,然后我的 FSM 应该进一步传递给它的 parent。由于 Akka 中的 FSM(自然地)也是演员,我想覆盖 receive
来捕捉那些 ActorRefs
。但是,这样做会破坏 actor 的 FSM 功能。处理这种情况的正确方法是什么?
与任何 FSM 状态无关的消息可以在 whenUnhandled
中处理:
whenUnhandled {
case Event(someActorRef: ActorRef, _) =>
context.parent ! someActorRef
stay()
}
不过,据我所知,覆盖 receive
也应该有效。