Akka 提供了两种有些重叠的方式来管理 Actor 状态,有限状态机 http://doc.akka.io/docs/akka/2.4.14/scala/fsm.html and 不成/成为 http://doc.akka.io/docs/akka/2.4.14/scala/actors.html。它们各自的优点/缺点是什么?什么时候应该选择其中之一而不是另一个?
FSM
是一种 DSL,允许您构建更复杂的、readable状态机比使用核心参与者 API 更可能实现。您可以向业务人员展示 FSM 代码,他们可以验证业务规则。
The FSM
DSL 允许您更清晰地将事物组合在一起。例如过渡 http://doc.akka.io/docs/akka/2.1.0/scala/fsm.html#Monitoring_Transitions允许您提取必须在参与者之间重复的逻辑become
行为。您还可以订阅其他参与者以获取转换通知,这有助于解耦和测试。
此外,计时器也很好地集成到 DSL 中,并且诸如取消之类的事情也得到了干净的处理。使用调度程序编码超时消息有许多问题。
不利的一面是FSM
重要的是它是一个 DSL 和一个供其他团队成员消化的新语法。好处是它是 DSL 和更高级别的抽象。我认为agilesteel的2个状态阈值是一个很好的阈值。但是一旦你超过了 2 个状态,你就会得到以下好处:FSM
真的很引人注目。
一定要读FSM 文档 http://doc.akka.io/docs/akka/2.1.0/scala/fsm.html和附带的例子 http://doc.akka.io/docs/akka/2.1.0/scala/fsm.html#Examples对比become
and FSM
.
一个注释:使用“弹出”行为unbecome
- 默认行为是不使用行为堆叠。它仅与少数用例相关(即通常不是状态机)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)