Zeebe服务学习2-状态机

1.什么是状态机?

第一次接触到这个名词,感觉自己是明白这个东东是啥的,但是后来发现,emm…,是的,只是理解了这个词而已。

贴一下官方介绍:

有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、软件工程,编译器、网络协议、和计算与语言的研究。

2.状态机有啥用?

说了那么多,show me the code!这个状态机具体能干啥?不然我学它干啥,屠龙之术,学了只能吹吹牛皮而已。

举个例子,介绍个简单的场景,现在有个流程:出库->修改库存->发货。


每个单据都有三个状态,CREATED,ACTIVITED,COMPLETED;我们一般会这样处理,调用新建出库单据,此时单据的状态是CREATED,

当该单据没有确认完成之前,该单据是ACTIVITED状态,

如果确认这个新建成功了,则更新该单据为COMPLETED状态;

如果想要继续执行这个流程,那么需要根据出库的单据上的状态做判断,如果是ACTIVITED,那么还不能去·`修改库存`;

如果是COMPLETED状态了,那么去修改库存单据;

同理,修改库存单据上也有三个状态…..,以此类推,每个单据都要去更新自身的状态,然后判断单据状态是否满足条件,才能确认是否执行下游的方法。

上面举得例子很简单,如果流程特别长,那么这种重复的更新、判断是不是太累了?那么累,是不是我们程序员没有做好啊?

这时候,可以用我们的主角:状态机登场。

状态机维护状态:CREATED,ACTIVITED,COMPLETED。

状态的变化是由事件触发的,换成公式就是:

State(S) + Event(E) -> Actions (A), State(S')

一个老的状态,经过一个事件触发,发生一个行为,然后状态变成了新状态。

状态机的好处是通过把状态与事件分开,通过上述的公式,把一团逻辑解耦成一个公式去完成,事件只会被触发,行为关联事件去执行,

那么业务就不用去操心if else了,只管去触发关联事件就行了。

3.Zeebe框架咋用的?

Zeebe框架的每个服务节点都是有三个状态的:CREATED,ACTIVITED,COMPLETED。

举例:当一个节点实体经过createEvent触发,引起create行为,该实体状态就变成了CREATED;

当触发一个activeEvent,产生激活行为(调用新建的JobWorker),该实体变成ACTIVITED;当新建的JobWorker调用完成,触发compleEvent,

此时Zeebe更新该实体状态为COMPLETED。

这些过程,对于Zeebe服务调用者是不可见的,开发者只会发现,自己的流程的新建节点已经完成,开始进入下面的服务节点中了。

参考:(1)https://blog.csdn.net/qq_30739519/article/details/89444631
           (2)https://blog.csdn.net/xinghuanmeiying/article/details/81586954

原文地址:https://www.cnblogs.com/walt/p/11328843.html