文章目录
- 一、工作流介绍
- 二、工作流引擎
- 三、Camunda
一、工作流介绍
1、什么是工作流
- 工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。指在组织中,多个任务、活动或过程之间的顺序和控制流。
- 这些任务通常涉及多个参与者、系统或部门,工作流的目标是将复杂的业务逻辑分解为多个可管理的逻辑段,并统一控制这些逻辑段的执行条件、执行顺序以及相互通信,从而实现业务逻辑的解耦与优化。
- 这种方式不仅提高了业务流程的灵活性和可维护性,还促进了各个环节之间的协同工作。
2、为什么要使用工作流
-
提高效率:通过自动化和标准化重复性任务,减少人工干预,提升整体工作效率。
-
增强透明度:工作流提供清晰的任务分配和进度跟踪,使团队成员能够实时了解工作状态,促进协作。
-
降低错误率:通过预定义的流程和自动化步骤,减少人为错误,提高数据准确性。
-
灵活性和适应性:可以根据业务需求快速调整和优化流程,适应变化的市场环境。
-
优化资源管理:通过有效分配和调度资源,确保任务按时完成,提高资源利用率。
-
监控和分析:提供实时监控和数据分析功能,帮助识别瓶颈和改进机会,持续优化业务流程。
-
合规性和标准化:确保业务流程符合行业标准和法规要求,提高合规性,减少风险。
二、工作流引擎
工作流引擎是用于管理和执行工作流的系统,它们帮助自动化和优化业务流程。常见的工作流引擎包括:
工作流引擎 | 介绍 |
---|---|
Camunda | Camunda 是一个开源的工作流和决策自动化平台,源自 Activiti 5。它支持 BPMN(业务流程模型与符号)、CMMN(案例管理模型与符号)和 DMN(决策模型与符号)。Camunda 强调性能和稳定性,通过压力测试验证了其 BPMN 引擎的高效性。除了强大的流程引擎外,Camunda 还提供丰富的建模、任务管理和监控工具,适合企业级应用。 |
Activiti | Activiti 是由 Alfresco 开发的开源工作流引擎,现最高版本为 Activiti Cloud 7.1.0。Activiti 提供灵活的工作流管理功能,支持 BPMN 2.0,但在 Activiti 6 版本中,因团队分歧部分开发者分裂,形成了 Flowable。Activiti 注重于企业的业务流程管理,适合快速集成和灵活的开发环境。 |
Flowable | Flowable 是从 Activiti 6 衍生出来的工作流引擎,开发团队也是 Activiti 中分裂出来的。Flowable 修复了 Activiti 6 中的多个问题,并在此基础上实现了对 DMN(决策模型与符号)和 BPEL(业务流程执行语言)的支持。Flowable 注重高性能和灵活性,适合复杂的业务场景,并且具有较强的可扩展性。 |
JBoss jBPM | JBoss jBPM 是由 Red Hat 提供的开源工作流引擎,支持业务流程的建模、执行和监控。jBPM 设计为轻量级且可扩展,适合企业应用。它支持 BPMN 2.0 和事件驱动的工作流,能够与其他 JBoss 产品无缝集成,适合在复杂环境中运行。 |
Bonita BPM | Bonita BPM 是一个开源的业务流程管理平台,提供强大的图形化建模工具。Bonita 强调高自定义性,允许用户根据需求进行扩展和集成。它支持 BPMN 2.0,并提供用户友好的界面,适合业务用户进行流程设计和管理,同时具备良好的文档和社区支持。 |
Apache Airflow | Apache Airflow 是一个专注于数据工作流的调度和管理系统,适合数据工程和 ETL 流程。它支持动态工作流定义,可以通过编程方式定义任务之间的依赖关系。Airflow 提供直观的 Web 界面,便于监控任务状态,具有良好的扩展性和灵活性。 |
Oracle BPM Suite | Oracle BPM Suite 是一个全面的企业级工作流解决方案,集成了业务流程建模、执行和优化功能。它支持 BPMN 2.0,提供强大的分析和监控工具,帮助企业优化流程。该解决方案与其他 Oracle 产品无缝集成,适合大型组织的复杂业务需求。 |
IBM Business Process Manager | IBM Business Process Manager 是 IBM 提供的综合工作流管理解决方案,支持从建模到执行的全生命周期管理。它提供用户友好的建模工具,支持 BPMN 2.0,同时具有强大的数据分析和报告功能。该平台适合大型企业,能够满足复杂的业务流程需求,并支持云端和本地部署。 |
三、Camunda
1、什么是 Camunda 流程引擎?
Camunda 流程引擎是一个开源的业务流程管理(BPM)和决策自动化平台,旨在帮助企业设计、执行和优化其业务流程。它遵循多个行业标准,包括 BPMN(业务流程模型和符号)、CMMN(案例管理模型和符号)和 DMN(决策模型和符号),从而为用户提供强大的建模和执行能力。
2、Camunda应用架构
Camunda 的应用架构是一个基于 Java 的分布式应用架构,主要包括以下几个核心组件:
2.1、Camunda BPM 引擎
- 核心功能:执行 BPMN 2.0 流程、CMMN 案例和 DMN 决策模型。
- 高性能:经过优化,支持高并发和复杂业务逻辑的执行。
- 集成:可嵌入到 Java 应用中,或通过 REST API 与外部系统交互。
2.2、建模工具
- Camunda Modeler:图形化工具,用于设计和编辑 BPMN、CMMN 和 DMN 模型,便于业务用户进行流程建模。
2.3、用户任务管理
- Tasklist:Web 应用,用户可以在此管理和处理任务,查看分配的任务并通过表单完成。
2.4、监控与分析工具
- Cockpit:用于实时监控流程执行,提供流程实例状态、性能指标和历史数据分析,帮助识别瓶颈和优化流程。
2.5、REST API
- 接口服务:提供全面的 RESTful API,支持流程的启动、任务查询、用户管理等操作,便于与其他系统集成。
2.6、外部任务
- 任务处理:支持外部任务模式,将任务分配给外部服务或微服务,提高灵活性和可扩展性。
2.7、事件处理
- 事件驱动:支持处理多种事件(如消息、信号、定时器),实现复杂的事件驱动工作流。
2.8、多租户支持
- 多租户架构:支持在同一引擎实例中管理多个租户,确保数据隔离和安全性,适合 SaaS 解决方案。
3、Camunda开发架构
Camunda 的架构通常呈现为微服务架构,组件之间可以独立部署和扩展。例如:
前端应用:用户界面(如 Tasklist 和 Cockpit)。
服务层:Camunda 引擎与外部服务(如任务处理服务)交互。
数据层:使用关系型数据库存储流程实例、任务、用户信息等。
Camunda的开发架构可以分为前端开发架构和后端开发架构。
3.1、前端开发架构
Camunda前端使用Angular框架进行开发,主要包括以下组件:
-
Cockpit:流程监控和管理界面。
-
Tasklist:任务管理和审批界面。
-
Admin:系统管理和配置界面。
3.2、后端开发架构
Camunda后端使用Java语言进行开发,主要包括以下组件:
-
Camunda BPM Engine:流程引擎。
-
Camunda BPM Platform:基于Spring Boot的应用程序。
-
REST API:提供对流程引擎的访问。
-
Job Executor:用于执行定时任务和异步任务。
4、Camunda常用Api
-
4.1、RepositoryService
在 Camunda BPM 中,RepositoryService 是一个核心服务接口,主要用于管理和操作流程定义和部署。它提供了一系列功能,支持开发人员在工作流和业务流程管理中进行有效的操作。以下是 RepositoryService 的主要作用和功能:
-
流程部署:
提供方法用于将 BPMN、CMMN 和 DMN 模型部署到引擎中。这是创建和执行流程的第一步。 -
流程定义查询:
允许开发者查询已部署的流程定义。可以通过流程定义的关键字、版本、租户等条件进行查询。 -
获取流程实例:
能够获取与特定流程定义相关联的流程实例信息,支持对已运行流程的监控和管理。 -
版本管理:
管理流程定义的版本,可以查看不同版本的流程定义,并支持升级和激活新版本的流程。 -
流程定义激活和停用:
支持激活和停用流程定义,便于在不影响正在执行的实例的情况下进行流程的更新和维护。 -
获取资源:
提供方法获取已部署模型的资源(如 BPMN 文件、决策表等),可以方便地访问和下载这些资源。 -
多租户支持:
支持对多租户环境中流程定义的管理,确保数据隔离和安全性。
-
代码示例
RepositoryService repositoryService = processEngine.getRepositoryService();
// 部署流程
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("path/to/process.bpmn")
.deploy();
// 查询流程定义
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("myProcess")
.list();
// 激活流程定义
for (ProcessDefinition definition : processDefinitions) {
repositoryService.activateProcessDefinitionById(definition.getId());
}
-
4.2、RuntimeService
在 Camunda BPM 中,RuntimeService 是用于管理和操作运行时流程实例的核心服务接口。它提供了一系列功能,使开发者能够控制和监视正在执行的流程实例。以下是 RuntimeService 的主要作用和功能:
-
启动流程实例:
允许根据流程定义启动新的流程实例。可以传递业务参数以初始化流程变量。 -
查询流程实例:
提供查询方法,可以根据流程实例的状态、业务键、租户 ID 等条件检索当前运行的流程实例。 -
任务管理:
支持获取与流程实例关联的用户任务,帮助开发者管理和监控用户交互。 -
流程变量操作:
允许获取、设置和删除流程实例中的流程变量,便于动态管理流程执行中的数据。 -
信号和消息:
提供发送信号和消息的功能,以实现事件驱动的流程交互,支持跨流程实例之间的通信。 -
结束流程实例:
能够结束或删除正在运行的流程实例,支持指定结束原因。 -
挂起和激活流程实例:
允许挂起(暂停)和激活(恢复)流程实例,方便在需要时控制流程执行。
-
代码示例
RuntimeService runtimeService = processEngine.getRuntimeService();
// 启动新的流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess", variables);
// 查询正在运行的流程实例
List<ProcessInstance> instances = runtimeService.createProcessInstanceQuery()
.active()
.list();
// 设置流程变量
runtimeService.setVariable(processInstance.getId(), "myVariable", value);
// 发送消息
runtimeService.signalEventReceived("mySignal");
// 结束流程实例
runtimeService.deleteProcessInstance(processInstance.getId(), "Finished");
-
4.3、TaskService
在 Camunda BPM 中,TaskService 是用于管理和操作用户任务的核心服务接口。它提供了一系列功能,使开发者能够处理与用户交互相关的任务。以下是 TaskService 的主要作用和功能:
-
查询用户任务:
提供查询方法,允许开发者根据任务的状态、任务名称、流程实例等条件检索用户任务。 -
获取任务详情:
能够获取特定用户任务的详细信息,包括任务的描述、创建时间、分配的用户等。 -
任务分配:
支持将用户任务分配给特定用户或候选用户组,确保任务可以由适当的人员处理。 -
完成任务:
提供方法用于完成用户任务,同时可以传递流程变量,以便在任务完成时更新流程状态。 -
撤销和删除任务:
支持撤销(回滚)任务状态或删除已存在的任务,便于流程的灵活管理。 -
任务的优先级和截止时间:
允许设置任务的优先级和截止时间,以确保高优先级任务得到及时处理。 -
附加操作:
支持任务的挂起、激活以及添加附加的评论或文档,丰富任务的上下文信息。
-
代码示例
TaskService taskService = processEngine.getTaskService();
// 查询用户任务
List<Task> tasks = taskService.createTaskQuery()
.taskAssignee("userId")
.list();
// 获取特定任务的详情
Task task = taskService.createTaskQuery()
.taskId("taskId")
.singleResult();
// 完成用户任务
taskService.complete(task.getId(), variables);
// 设置任务优先级
taskService.setPriority(task.getId(), 5);
// 删除任务
taskService.deleteTask(task.getId(), "Reason for deletion");
-
4.4、FormService
在 Camunda BPM 中,FormService 是用于管理和操作表单的核心服务接口。它提供了一系列功能,支持与用户任务相关的表单处理。以下是 FormService 的主要作用和功能:
-
获取表单定义:
提供方法获取与用户任务或流程实例关联的表单定义,支持 BPMN 流程中定义的用户任务表单。 -
渲染表单:
支持将表单定义转换为用户界面,方便用户填写和提交表单数据。 -
获取表单变量:
提供方法获取用户填写的表单数据,便于在任务完成时将用户输入的数据传递到流程中。 -
表单字段验证:
支持表单字段的验证,确保用户输入的数据符合要求,增强用户体验。 -
动态表单生成:
允许根据流程变量动态生成表单,以适应不同的业务场景和需求。
-
代码示例
FormService formService = processEngine.getFormService();
// 获取用户任务的表单定义
String taskId = "taskId";
FormData formData = formService.getTaskFormData(taskId);
// 渲染表单
String formKey = formData.getFormKey(); // 获取表单的渲染信息
// 提交表单数据
Map<String, Object> properties = new HashMap<>();
properties.put("variableName", value);
formService.submitTaskForm(taskId, properties);
// 获取已填写的表单变量
Map<String, String> submittedData = formService.getTaskFormData(taskId).getFormFields();
在 Camunda BPM 中,HistoryService 是用于管理和查询历史数据的核心服务接口。它提供了一系列功能,支持对已完成的流程实例、任务和事件进行监控和分析。以下是 HistoryService 的主要作用和功能:
-
查询历史流程实例:
提供方法可以查询已完成或被删除的流程实例,支持按状态、时间范围、流程定义等条件进行查询。 -
查询历史用户任务:
允许查询已完成的用户任务,帮助分析任务执行情况和用户参与度。 -
历史事件:
提供对历史事件(如流程启动、结束、任务完成等)的访问,支持事件的详细分析。 -
历史变量:
支持查询已完成的流程实例中的历史变量,便于回溯和分析数据变化。 -
统计分析:
提供方法生成统计信息,如流程执行时间、任务处理时间等,帮助识别瓶颈和优化流程。 -
数据清理:
支持历史数据的清理和管理,确保系统性能和存储效率。
代码示例
HistoryService historyService = processEngine.getHistoryService();
// 查询已完成的流程实例
List<HistoricProcessInstance> completedInstances = historyService.createHistoricProcessInstanceQuery()
.finished()
.list();
// 查询历史用户任务
List<HistoricTaskInstance> completedTasks = historyService.createHistoricTaskInstanceQuery()
.taskAssignee("userId")
.finished()
.list();
// 查询历史变量
List<HistoricVariableInstance> historicVariables = historyService.createHistoricVariableInstanceQuery()
.processInstanceId("instanceId")
.list();
// 统计分析
long completedCount = historyService.createHistoricTaskInstanceQuery()
.finished()
.count();
在 Camunda BPM 中,JobService 是用于管理和处理异步作业的核心服务接口。它提供了一系列功能,以便有效地调度和执行任务,如定时作业和异步执行的流程操作。以下是 JobService 的主要作用和功能:
-
创建作业:
允许将作业(如定时任务和异步操作)添加到引擎,以便在指定时间或条件下执行。 -
查询作业:
提供方法查询当前存在的作业,支持按状态(如待处理、失败等)、类型和其他条件进行检索。 -
执行作业:
提供执行特定作业的能力,确保作业可以按需被处理。 -
删除作业:
允许删除不再需要的作业,帮助管理作业的生命周期。 -
处理失败作业:
提供对失败作业的访问和处理方法,确保系统的健壮性和稳定性。 -
管理并发作业:
支持并发执行作业,提升系统的处理能力和效率。
代码示例
JobService jobService = processEngine.getJobService();
// 查询待处理的作业
List<Job> jobs = jobService.createJobQuery()
.active()
.list();
// 执行特定作业
if (!jobs.isEmpty()) {
jobService.executeJob(jobs.get(0).getId());
}
// 删除作业
jobService.deleteJob("jobId");
// 处理失败的作业
List<Job> failedJobs = jobService.createJobQuery()
.failed()
.list();
for (Job job : failedJobs) {
jobService.retryJob(job.getId());
}
在 Camunda BPM 中,JobExecutor 是负责处理异步作业和定时作业的核心组件。它自动管理作业的调度和执行,确保系统能够高效地处理长时间运行的任务和事件。以下是 JobExecutor 的主要作用和功能:
-
作业调度:
定期查询数据库,查找待执行的作业,包括异步作业和定时作业。 -
作业执行:
在找到可执行的作业后,JobExecutor 会执行这些作业,确保系统能够按预期处理任务。 -
并发处理:
支持并发执行多个作业,能够根据配置的线程池大小同时处理多个任务,提高系统的吞吐量。 -
失败处理:
自动处理执行失败的作业,允许重试逻辑,以确保任务最终能够成功完成。 -
灵活配置:
可以根据业务需求配置作业的执行频率、并发数量等参数,以优化性能。
配置示例
JobExecutor 的一些常用配置参数可以在 camunda.cfg.xml 或者 Spring 配置文件中进行设置,例如:
<property name="jobExecutorActivate">true</property>
<property name="jobExecutorPoolSize">5</property>
<property name="jobExecutorMaxPoolSize">10</property>
<property name="jobExecutorWaitTime">1000</property>
5、Camunda流程引擎并发性能优化
标签:引擎,流程,作业,用户,任务,实例,Camunda From: https://blog.csdn.net/weixin_44876263/article/details/142332063https://blog.csdn.net/weixin_44876263/article/details/142337476?sharetype=blogdetail&sharerId=142337476&sharerefer=PC&sharesource=weixin_44876263&spm=1011.2480.3001.8118