akka
最近,我有机会在工作中与Akka FSM一起玩了一些非常有趣的用例。 API(实际上是DSL)非常棒,整个体验令人赞叹。 这是我尝试记录有关使用Akka FSM构建有限状态机的注释。 作为示例,我们将逐步完成构建(有限)咖啡自动售货机的步骤。
为什么
我们知道,普通的香草Akka演员可以使用“变得/变得不受欢迎”来切换其行为。 那么,为什么我们需要Akka FSM? 简单的Actor不能只是在州之间切换并表现出不同的行为吗? 是的,可以。 但是,尽管Akka的成败变得通常足以切换涉及几个状态的Actor的行为,但是构建具有多个状态的State Machine很快会使代码难以推理(甚至更难以调试)。
毫不奇怪,如果我们的演员中有两个以上的州 ,流行的建议是切换到Akka FSM。
什么是Akka FSM
为了进一步扩展,Akka FSM是Akka构造有限状态机的方法,它简化了Actor在各个州和州之间转换的行为管理。
在幕后,Akka FSM只是Actor扩展的特征。
trait FSM[S, D] extends Actor with Listeners with ActorLogging
这种FSM
特性提供的是纯魔术,它提供了包裹常规Actor的DSL,使我们能够集中精力更快地构建手头的状态机。
换句话说,我们的常规Actor仅具有一个receive
函数,而FSM特性包装了一种receive
方法的复杂实现,该实现将调用委托给处理处于特定状态的数据的代码块。
我个人注意到的另一件好事是,编写后,完整的FSM Actor仍然看起来干净且易于阅读。
好了,让我们看一下代码。 就像我说的,我们将使用Akka FSM制造一台咖啡自动售货