Akka 密克罗尼西亚克与阿卡的变身/变身

Akka 密克罗尼西亚克与阿卡的变身/变身,akka,fsm,Akka,Fsm,Akka提供了两种有点重叠的方法来管理参与者状态,以及。它们各自的优点/缺点是什么?什么时候应该选择其中一个而不是另一个?与FSM相比,Been/Unbecome非常轻量级。因此,除非你有两个以上的状态(例如开/关)和/或复杂的状态更改策略,否则我不会将“变成/不变成”转换为完整的FSM。除此之外,我认为只有一些细微的区别……例如,FSM为您提供了一个很好的内置计时器DSL: setTimer("TimerName", msg, 5 seconds, repeat = true) // ...

Akka提供了两种有点重叠的方法来管理参与者状态,以及。它们各自的优点/缺点是什么?什么时候应该选择其中一个而不是另一个?

与FSM相比,Been/Unbecome非常轻量级。因此,除非你有两个以上的状态(例如开/关)和/或复杂的状态更改策略,否则我不会将“变成/不变成”转换为完整的FSM。除此之外,我认为只有一些细微的区别……例如,FSM为您提供了一个很好的内置计时器DSL:

setTimer("TimerName", msg, 5 seconds, repeat = true)
// ...
cancelTimer("TimerName")

例如,我不确定在FSM中是否有可能“返回”到前一个状态,只有“前进”,因为您必须明确指定要转到哪个状态。而
unbecome
恰恰提供了这一点。

FSM
是一种DSL,它允许您构建比使用core actor API更复杂、可读的状态机。您可以向业务人员展示FSM代码,他们可以验证业务规则

FSM
DSL允许您更清晰地将事物组合在一起。例如,允许您将必须在参与者
之间复制的逻辑分解为
行为。此外,您还可以订阅其他参与者,以获得有关转换的通知,这有助于解耦和测试

此外,计时器被很好地集成到DSL中,并且像取消这样的事情被干净地处理。使用调度程序对超时消息进行编码有许多问题

FSM
的缺点在于它是一种DSL,是其他团队成员需要理解的新语法。好的一面是它是DSL和更高级别的抽象。我认为agilesteel的两个状态的阈值是一个很好的阈值。但是一旦你通过了2个州,
FSM
的好处就非常引人注目了

明确阅读,对比的
变成
FSM

关于使用
unbecome
“弹出”行为的一个注意事项-默认行为是不使用行为堆叠。它仅在少数用例中相关(即,通常不是状态机)