当前位置: 首页 > 科技观察

为什么要使用工作流引擎,什么是工作流引擎,工作流引擎选型以及使用方法

时间:2023-03-12 17:07:08 科技观察

本文转载自微信公众号《Java大厂面试官》,作者laker。转载本文请联系Java大厂面试官码号。为什么要使用工作流引擎?反证,如果不使用工作流引擎,先以请假流程为例,从头开发流程的业务逻辑:(大家看看会出现什么问题?使用工作流可以解决什么问题?会带来什么问题?)1.业务流程排序》流程定义可能是硬编码的,或者存储在某个表中,总经理审批结束,员工发起请假,组长审批请假。请假天数小于或等于2天记录当前操作员并判断下一个节点if(day>2)总经理批准(记录谁发起并判断下一个节点)endif(day<=2)endagreeorrejectnextUserId根据上面的流程定义获取存储进入转移状态转表,userIdnextUserId等被驱动到下一个节点员工填写请假单,提交nextUserId根据上面的流程定义,它是离开表中的tored、创建者、创建时间存储在转移状态转移表中。UserId、nextUserId等驱动到下一个节点员工发起请假(记录谁发起并判断下一个节点)组长审批(记录谁发起并判断下一个节点)请假天数少≥2天(记录谁发起并判断下一个节点)请假天数大于2天(记录谁发起并判断下一个节点)是否有其他用车流程、报销流程等,那么您的项目将无法在不使用工作流的情况下进行维护。工艺设计存在以下问题。没有可视化流程,没有版本管理,热部署。每个活动的流程都需要对下一个活动节点及其操作者进行硬性判断。每个操作都需要维护业务数据和流程相关数据。缺乏数据管理、流程监控等功能Workflow的优缺点对以上常见问题进行抽象,抽象,抽象,可以得出如下视图。将业务和流程抽象分离,降低耦合度。优点是有可视化的流程设计工具。业务数据和流程数据的分离允许更集中的性能优化。内置业务划分API,可以很好的完成常用的功能场景。进程监控系统有大量的自定义扩展接口。缺点是需要额外的学习成本。什么是工作流引擎?不同的分工和条件决定了信息传输路由和内容层次等核心解决方案。工作流引擎包括流程节点管理、流向管理、流程样本管理等重要功能。(摘自百科)尝试自己搭建一个工作流引擎以下内容摘自:https://www.cnblogs.com/duck-and-duck/p/14436373.html并做了部分修改。第一天查了一下什么是工作流,然后做了如下版本:添加任意一个审批人,组成一个链表,最后添加一个结束节点,记录当前审批人。审批完成后,审批人后退。当审批人对应到结束节点时,流程结束。》每个节点的执行者都是hardcoding,第二天发现有些业务需要支持会签节点,改天又查了一下什么是会签节点,发现会签节点就是大节点,有很多审批人在里面。只有这个大节点的所有人都通过了审批才能进入下一个节点。翻了一下原来的链表设计:第三天发现有些业务需要支持条件节点,应该根据表格内容确定下一个进入哪个分支。第四天,增加两种类型的审批人,比如可以从表格中选择下一个审批人,根据不同的发起人选择不同的审批人。第五天,你需要满足xxx要求,当...《看来实现一个工作流引擎还是挺难的,那么可选的轮子有哪些?生命周期)流程设计引擎驱动的数据管理流程监控基于bpmn标准的流程定义什么是BPMNBPMN是BusinessProcessModeling的缩写Notation,即业务流程建模和标注。BPMN定义了业务流程图,它被设计用来创建业务流程操作的图形模型。业务流程模型(BusinessProcessModel)指的是网络图由图形对象组成。图形对象包括活动,用于定义这些活动的执行。顺序流控制器(flowcontrols)。代表性实现产品如下:JBPMActivitiFlowable国内定制snakerjflow如何使用SnakerFlow工作流仅列举常见的功能场景进行实现。具体介绍和详细文档可以参考:SpringBoot集成SnakerFlow流程引擎,介绍,功能列表,详解,扩展点解析《??????基于SnakerFlow轻量级工作流引擎的开源脚手架项目easy-admin》详细可以参考:终于写了一个开源项目,easy-admin是搭建一个简单的、轻量级的后台管理系统脚手架下面通过leave流程来看一下数据库中的数据流转。相关源代码已经开源。基于SnakerFlow轻量级工作流引擎的脚手架项目easy-admin。简单轻量级后台管理系统脚手架初始状态wf_process员工发起请假申请args.put("user1",StpUtil.getLoginIdAsString());args.put("user2","yang");args.put("user3","zhang");Objectday=args.get("day");if(day!=null){args.put("day",Integer.valueOf((String)day));}bsnakerEngineFacets.startAndExecute(名称,version,StpUtil.getLoginIdAsString(),args);员工laker发起请假单,laker的待办事项列表为空3天,完成后的列表如下:yang的待办事项如下:当前监控流程图wf_orderwf_taskwf_task_actorwf_hist_orderwf_hist_taskwf_hist_task_actor是常见的功能流程标题我们经常希望待办任务列表中有一栏是流程实例的名称,也就是标题。比如我们希望流程的标题是:张三-2019-12-0416:40:20请假,通常使用这样的命名规则:Initiate人+启动时间+流程模型名称将其用作流程的标题。这时候希望在流程实例启动的时候可以设置流程实例的名称。args.put(SnakerEngine.ID,"张三-2019-12-0416:40:20请假申请");snakerEngineFacets.startAndExecute(名称,版本,StpUtil.getLoginIdAsString(),args);发起申请args.put(SnakerEngine.ID,"张三-2019-12-0416:40:20的请假申请");snakerEngineFacets.startAndExecute(name,version,StpUtil.getLoginIdAsString(),args);MylaunchQueryFilterfilter=newQueryFilter();filter.setOperator(operator);filter.orderBy("create_Time").order(DESC);snakeEngineFacets.getEngine().query().getHistoryOrders(页面,过滤器);我的待办事项Pagepage=newPage<>(30);snakerEngineFacets.getEngine().query().getWorkItems(page,newQueryFilter().setOperator(operator));我的页面page=newPage<>(30);snakerEngineFacets.getEngine().query().getHistoryWorkItems(page,newQueryFilter().setOperator(operator));提醒列表<任务>tasks=snakerEngineFacets.getEngine().query().getActiveTasks(newQueryFilter().setOrderId(orderId));根据这个任务发送消息给指定的人来转移任务(改变当前的handler,或者改变当前的handler)snakeEngineFacets.transferMajor(taskId,operator,nextOperators);Reject拒绝/返回上一步/返回(即返回历史上的某个节点)snakeEngineFacets.executeAndJump(taskId,operator,args,nodeName);根据历史任务id撤回,withdrawby该历史任务派发的所有活动任务,如果没有活动任务,则不允许撤回snakeEngineFacets.getEngine().task().withdrawTask(taskId,operator);CC实例的CC类似于邮箱中的CC功能,一般用于将流程实例复制到leader。检查新表wf_cc_order以根据实例ID、创建者和CC创建一条CC记录。engine.order().createCCOrder(StringorderId,Stringcreator,String...actorIds)更新状态它用于更新已读取的CC记录engine.order().updateCCStatus(StringorderId,String...actorIds)和addasignature(添加另外一个人或者人的认可)engine.task().addTaskActor(StringtaskId,1,String...actorIds)会签和会签(一般用于认可后给相关人签字确认,从而获得工作coordination.)snaker的会签目前比较简单,只是根据任务节点的performType属性值来决定是否生成多个相同的任务。performType有两个值,ANY和ALL。当ANY有多个参与者时,任何一个完成任务并继续传输(或签名)ALL。当有多个参与者时,他们都需要完成任务才能继续传递会签。只需要将流程定义中任务节点的属性performType的值设置为ALL即可。调用api传递多个参与者时,会自动派发与参与者数量相等的任务。会签任务必须等待所有参与者完成后才能继续流通或使用基于SnakerFlow轻量级工作流引擎的开源脚手架项目easy-admin进行签名。具体可以参考:终于写了一个开源项目。一、轻量级后台管理系统脚手架