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

Zeebe服务学习2-状态机的更多相关文章

  1. Zeebe服务学习1-简单部署与实现demo

    1.Zeebe是什么? Camunda公司研发的工作流引擎Zeebe,目标是对微服务的编排.具体详细介绍可以参考官网:https://zeebe.io/what-is-zeebe/ 2.背景 随着微服 ...

  2. Zeebe服务学习5-多实例特性实践

    一.背景 在0.21版本之前,Zeebe不支持多实例元素,在2019年10月9号发布的0.21版本中,加入这一特性, 主要是体现在Zeebe Modeler 0.7.0以及之后的版本中. 二.特性介绍 ...

  3. Zeebe服务学习3-Raft算法与集群部署

    1.背景Zeebe集群里面保证分布式一致性问题,是通过Raft实现的,其实这个算法用途比较广泛,比如Consul网关,也是通过Raft算法来实现分布式一致性的. 首先简单介绍一下Raft: 在学术界, ...

  4. angular的uiRouter服务学习(4)

    本篇接着上一篇angular的uiRouter服务学习(3)继续讲解uiRouter的用法 本篇主要讲解uiRouter的url路由 大多数情况下,状态是和url相关联的: 当url改变,激活对应的状 ...

  5. angular的uiRouter服务学习(3)

    本篇接着上一篇 angular的uiRouter服务学习(2) 继续讲解uiRouter的用法 本篇主要讲解uiRouter的多个命名的视图 我们可以给ui-view元素添加ui-view的值来给它命 ...

  6. angular的uiRouter服务学习(2)

    本篇接着上一篇 angular的uiRouter服务学习(1) 继续讲解uiRouter的用法 本篇主要讲解uiRouter的嵌套状态&嵌套视图 嵌套状态的方法: 状态和状态之间可以互相嵌套, ...

  7. SpringCloud微服务学习笔记

    SpringCloud微服务学习笔记 项目地址: https://github.com/taoweidong/Micro-service-learning 单体架构(Monolithic架构) Mon ...

  8. 微服务学习笔记(1)——使用MagicOnion实现gRPC

    原文:微服务学习笔记(1)--使用MagicOnion实现gRPC 1.什么是gRPC 官方文档:https://grpc.io/docs/guides/index.html 2.什么是MagicOn ...

  9. 微服务学习笔记(2)——使用Consul 实现 MagicOnion(GRpc) 服务注册和发现

    原文:微服务学习笔记(2)--使用Consul 实现 MagicOnion(GRpc) 服务注册和发现 1.下载打开Consul 笔者是windows下面开发的(也可以使用Docker). 官网下载w ...

随机推荐

  1. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest PART(10/12)

    $$2017-2018\ ACM-ICPC,\ Asia\ Daejeon\ Regional\ Contest$$ \(A.Broadcast\ Stations\) \(B.Connect3\) ...

  2. 20162017-acmicpc-south-pacific-regional-contest-sppc-16 B.Ballon Warehouse

    题意:给你一个无限长且元素均为\(0\)的排列,每次给你一对\((x,y)\),表示在所有\(x\)的后面插入一个元素\(y\),最后给你一个区间\((l,r)\),输出\([l,r-1]\)中的所有 ...

  3. HTTP笔记2--简单的HTTP 协议

    HTTP概念 HTTP用于客户端和服务器之间的通信 客户端:请求访问文本或图像等资源的一端 服务器端而提供资源响应的一端 通过请求和响应的交换达成通信 HTTP 协议规定,请求从客户端发出,最后服务器 ...

  4. Linux-单用户/救援模式

    目录 企业案例一:忘记root密码 企业案例二:修改了默认的运行级别为poweroff或者reboot 企业案例三:误损坏MBR(只能以救援模式解决) 企业案例四:误删除GRUB菜单(只能以救援模式解 ...

  5. 2.了解nginx常用的配置

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-07-10 20:56:10 星期三 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...

  6. 操作系统 part3

    1.操作系统四特性 并发:一个时间段,多个进程在宏观上同时运行 共享:系统中的资源可以被多个并发进程共同使用(互斥共享,同时共享) 虚拟:利用多道程序设计,利用时分复用(分时系统)和空分复用(虚拟内存 ...

  7. golang1.16新特性速览

    今天是假期最后一天,明天起大家也要陆续复工了.golang1.16也在今天正式发布了. 原定计划是2月1号年前发布的,不过迟到也是golang的老传统了,正好也趁着最后的假期快速预览一下golang1 ...

  8. Fetch API & cancel duplicate API & cache API

    Fetch API & cancel duplicate API & cache API const usersCache = new Map<string, User>( ...

  9. css background transparent All In One

    css background transparent All In One opacity ul { max-height: 100px; /* max-height: 187px; */ overf ...

  10. Python Web Framework All In One

    Python Web Framework All In One Django and Flask are the top Python web frameworks so far. Django ht ...