精雕细琢工作流的状态管理

2023-11-08 23:20

本文主要是介绍精雕细琢工作流的状态管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以有限状态机为原理的工作流引擎,就是通过工作流状态的改变来达到流程的流转,因此工作流系统中的各种状态概念显然很重要。

首先我们来看,工作流引擎在给业务流程建模的时候,将一个业务处理的场所定义成一个步骤节点,然后通过处理业务的时候,"提交业务处理结果"这样的动作来达到流程的流转。流程流转到哪个下一步骤,通过动作结果连线来导向。

工作流系统发生一次流转,工作流状态就会发生一次改变,即有限状态机中的状态升迁,流程实例从一种状态升迁到另一种状态是通过执行动作来完成的。

通常我们会理解发生一次流转,是从A步骤--》X步骤,但如果一次流转是 A步骤--》A步骤,原地踏步,好象没有发生流转,究竟发生没有发生流转呢?从工作流的状态概念来理解,一定是发生了流转。

工作流状态 = 当前步骤 +当前步骤的状态

工作流发生一次流转,使得流程状态发生一次升迁,当A步骤--》X步骤,步骤发生了变化,状态肯定升迁了。当A步骤--》A步骤,A步骤的状态一定是改变了,否则就没有意义了。A步骤--》A步骤也需要通过执行一个动作来完成,如果执行后,A步骤的状态也未发生改变,哪就不需要设计这个动作,可以通过只保存业务模块的业务数据来完成。

在一个工作流实例的生命周期内通常有一个或者多个活动的状态,单线运行的,就一个当前步骤+当前步骤的状态。当有并行节点的时候,就会有多个当前步骤+当步骤的状态。

步骤的状态,我们可以预设几种状态,步骤在进行中,等候处理中,完成,返回处理。 这几种状态和业务无关,纯粹只描述步骤的状态。
当A步骤--》A步骤 步骤的状态可以在这几个状态中改变。如当开始进入A步骤的时候,是进行中,当需要处理的事情太多,升迁到等候处理,当离开A步骤时,步骤的状态是完成,下一个步骤为进行中。因此我们在流程定义的时候,进入步骤的状态定义为进行中,离开定义为完成,便于我们更容易理解流程的流转,以实际的业务处理无关。


流程实例状态:创建,激活,挂起,终止,完成,这是工作流引擎中另外一个重要的概念,是描述流程实例的状态。
创建:流程实例刚创建的时候。
激活:流程正常流转时候的实例状态
挂起:当业务需要,暂停此业务的办理时,由管理员或者有权限的管理用户来执行挂起流程。当其它问题处理完毕,需要继续执行此流程的流转时候,可以恢复到激活,也可以直接就终止掉。
终止:当业务发生问题,或者异常的时候,有管理员或有权限的用户来直接终止掉此流程。终止后的流程不能再恢复成正常的继续流转。
完成:业务流程办理完毕,走到尽头了流程实例的状态。


当流程实例状态为挂起,流程实例就不能再发生流转了,同时,任务也不能继续执行,任务的状态也为挂起。等流程实例状态恢复后,任务才能继续执行。要知道在工作流系统中任务的完成,是由执行流程的动作来完成的,也即提交动作上挂接的业务模块来完成任务的。因此,工作流实例状态为挂起,任务也为挂起,工作流实例恢复后,任务也恢复到待执行,工作流实例终止后,任务也异常终止,工作流实例正常完成,实例关联的所有任务也正常完成了。


于细微之处体现成败,严谨这些工作流的状态管理彰显工作流软件产品的品质。

 

这篇关于精雕细琢工作流的状态管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/373054

相关文章

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess