蓝凌EKP18产品:整体架构

发布时间:2026/11/11 13:40:25

蓝凌EKP18产品:整体架构 一、四层架构总览EKP 流程引擎采用经典的四层分层架构从外到内依次是┌─────────────────────────────────────────────────────────┐ │ 应用层 (Application) │ │ │ │ 业务模块调用入口发起流程、审批、驳回、转办、加签... │ │ 提供给前端/第三方系统的 REST API / Java API │ │ │ │ 对应模块: sys-lbpmweb, sys-lbpmext, sys-lbpmdocking │ ├─────────────────────────────────────────────────────────┤ │ 引擎层 (Engine) │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 上层业务服务层 │ │ │ │ 流程模板管理、模拟仿真、变更日志、事件监听... │ │ │ │ 对应模块: sys-lbpmservice │ │ │ └─────────────────────────────────────────────────┘ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 中层引擎调度层 │ │ │ │ 操作行为调度、执行参数管理、节点属性解析... │ │ │ │ 包路径: engine/manager, engine/operation │ │ │ └─────────────────────────────────────────────────┘ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 底层PVM 虚拟机 │ │ │ │ 执行路径管理、原子操作调度、事件分发、状态机 │ │ │ │ 包路径: pvm/ (执行、操作、事件、上下文) │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ 对应模块: sys-lbpm │ ├─────────────────────────────────────────────────────────┤ │ 持久层 (Persistence) │ │ │ │ 数据访问对象 (DAO)、ORM映射、数据库表结构 │ │ 对应子包: engine/persistence │ │ 核心表: 流程实例表、执行路径表、工作项表、流程定义表... │ ├─────────────────────────────────────────────────────────┤ │ 基础层 (Infrastructure) │ │ │ │ Spring 容器、事务管理、权限框架、缓存、消息队列... │ │ 对应模块: CORE, com, sys-cache, sys-right 等 │ └─────────────────────────────────────────────────────────┘关键认识这不是简单的四层堆叠而是两套正交系统的组合纵向按调用层次划分谁调谁横向按功能领域划分管什么同一层里不同模块各管一块互不干扰跨层时通过接口契约通信上层依赖下层下层绝不反向调用。二、引擎层深度拆解引擎层是整套系统的核心从下到上又可以细分为三个子层2.1 底层PVM 流程虚拟机PVM 是流程引擎的CPU职责纯粹而关键——只管怎么走不管走什么。它关心的内容关心不关心当前执行路径在哪个节点这个节点是审批还是发邮件原子操作的排队和执行顺序每个原子操作内部的业务细节事件如何发布和分发事件监听器做了什么业务处理执行路径的父子关系和状态转换这些数据怎么存到数据库PVM 的六大子包各司其职execution执行路径流程的当前位置指针树形结构6 种状态operation原子操作最小执行单元双队列调度event事件流程生命周期事件定义启动、进入节点、离开节点、结束…builder定义模型流程定义的抽象表示节点、路由、条件context上下文执行环境、参数传递、变量作用域service服务接口PVM 与引擎层的解耦契约EngineWire、EngineProvider2.2 中层引擎调度层这一层是 PVM 虚拟机和具体业务之间的中间件。它的核心任务是把 PVM 发出的指令翻译成具体的业务动作。关键模块Manager管理器Manager 层掌握流程运行的全局状态和环境ProcessServiceManager流程服务的总入口协调各个子系统ExecutionParameters包装流程执行时需要的全部参数实例ID、操作类型、临时变量…ProcessParameters流程实例级别的参数上下文贯通整个执行周期ResourceCache流程定义、节点配置的缓存避免每次执行都重新解析Operation操作行为Operation 层定义了人工操作的抽象行为模板AbstractOperationBehaviour所有操作行为的基类定义了接收信号→执行业务→决定路由的标准流程AbstractManualOperationBehaviour人工审批操作同意/驳回/转办等的通用逻辑AbstractAdditionOperationBehaviour加签操作的通用逻辑这些抽象类定义了模板方法——子类只需填充具体的业务逻辑调度流程由父类统一控制。Node节点类型Engine 内置了四种标准节点每种都有对应的 Behaviour行为类节点类型作用对应的 BehaviourStartNode流程起点生成发起人待办StartNodeBehaviourEndNode流程终点触发结束事件EndNodeBehaviourSplitNode并行分支网关分裂执行路径SplitNodeBehaviourJoinNode聚合分支网关等待分支汇合JoinNodeBehaviour2.3 上层业务服务层这一层最接近应用层处理流程引擎的业务外围功能。它不属于引擎核心但又是流程系统不可或缺的部分。核心模块sys-lbpmservice包含流程模板管理流程定义的发布、版本管理、变更日志模拟仿真在不产生真实数据的前提下预览流程走向事件监听处理审批通过后发通知、更新关联数据、触发下游流程流程图导入导出可视化流程图与流程定义 XML 的互转定时任务超时提醒、自动催办、过期处理外部系统对接钉钉、飞书、第三方 OA 的消息推送三、模块间的交互流程接下来我们用一次完整的审批流转串联起各层的协作关系3.1 从宏观到微观的三级视角第一级系统间视角用户浏览器 → 前端应用 → REST API → 流程引擎 → 数据库这是最粗粒度的视图每一步只看到调用方向。第二级模块级视角浏览器 │ POST /api/workitem/complete ▼ sys-lbpmweb (REST Controller) │ 调用 service 接口 ▼ sys-lbpmservice (业务服务) │ 组装参数, 执行操作行为 ▼ sys-lbpm (引擎核心) │ PVM 驱动执行路径流转 ▼ engine/persistence (持久层) │ 写入工作项状态、执行路径状态 ▼ 数据库第三级引擎内部视角这就是第六课追踪过的路径ProcessServiceManager 接收请求 │ ▼ 创建 ExecutionContext上下文 │ ▼ ExecutionWraper.signal() 激活执行路径 │ ▼ Signal 原子操作 → 节点 Behaviour.signal() │ ▼ TransitionEndTask 结束当前任务 │ ▼ TransitionStartTask 启动下一节点 │ ▼ ExecuteTask 执行节点行为3.2 关键转折点人工节点 vs 自动节点整个流转过程中有一个关键分叉ExecuteTask │ ├── [人工节点] │ 创建待办工作项 │ 设置状态 WAITING │ 通知相关人员 │ ← 执行暂停等待外部信号 │ └── [自动节点] 执行业务逻辑计算、发通知、调接口… 自动完成 继续向前流转 ← 不停顿直接进入下一节点这就是为什么流程引擎在架构上天然分成同步执行和异步等待两部分。自动节点在引擎内部一次性跑完人工节点则需要执行路径停下来等待外部用户的操作信号。四、六大关键抽象架构的好坏关键看抽象设计。EKP 流程引擎定义了六组核心抽象每一组都精准地解耦了一个维度的变化4.1 EngineWire —— 执行路径的持久化抽象PVM 层不操作数据库——它只管内存中的执行路径对象。所有创建执行路径查找执行路径删除执行路径的操作都通过EngineWire接口委托给引擎层。这意味着什么如果未来要把执行路径从关系数据库迁移到 Redis 或 MongoDB只需换一个EngineWire实现PVM 层一行代码不用改。4.2 ActivityBehaviour —— 节点行为的可插拔抽象每个节点类型对应一个ActivityBehaviour实现。引擎调度层只和这个接口打交道不关心具体节点类型。这意味着什么要扩展自定义节点比如外部接口调用节点只需实现ActivityBehaviour接口然后注册到系统中即可——不用修改引擎核心的任何代码。4.3 AtomicOperation —— 执行步骤的最小单元抽象启动任务执行任务结束任务移动父任务——每一种流转动作都封装为独立的原子操作。它们通过名称互相引用通过队列统一调度。这意味着什么要新增一种流转动作比如跳过当前节点只需新增一个AtomicOperation实现然后在合适的事件监听器中触发它。4.4 JoinStrategy —— 聚合策略的策略抽象并行分支汇合时任意一人通过还是全部通过不同场景需要不同的聚合策略。JoinStrategy接口将策略定义与引擎核心分离AnyoneJoinStrategy有一人通过即完成聚合AndJoinStrategy所有人通过才算完成聚合这意味着什么如果要支持超过半数即通过的投票模式只需新增一个VoteJoinStrategy实现通过配置即可切换无需修改分支聚合的核心逻辑。4.5 ProcessServiceManager —— 服务调用的门面抽象这是引擎对外的总入口。无论是 Web 层的 REST 接口还是第三方系统的远程调用最终都通过ProcessServiceManager进入引擎内部。它就像一个前台——统一接待分发给后台各个职能部门处理。4.6 ExecutionContext —— 一次执行的快照抽象每次操作都会创建一个ExecutionContext它封装了当前执行所需的一切当前执行路径在哪关联的流程定义是什么流程参数有哪些引擎的服务提供器是谁这相当于把执行现场打了个包——后续的所有原子操作、事件监听都基于这个上下文展开不需要反复查询数据库。五、架构中的设计模式EKP 流程引擎的设计中几个经典模式贯穿始终5.1 模板方法模式最典型的应用在操作行为层AbstractOperationBehaviour模板 │ ├── signal() ← 模板方法定义标准流程 │ ├── preSignal() ← 钩子子类可选覆盖 │ ├── doExecute() ← 抽象方法子类必须实现 │ └── postSignal() ← 钩子子类可选覆盖 │ └── 子类实现: AgreeOperationBehaviour, RejectOperationBehaviour...价值确保所有操作行为遵循统一的调度流程子类开发者只需关心业务逻辑不用管调度机制。5.2 策略模式JoinStrategy是典型策略模式。聚合节点的核心逻辑不依赖具体策略运行时动态注入。价值新增聚合方式不影响聚合节点的核心实现符合对扩展开放对修改关闭的原则。5.3 观察者模式事件驱动PVM 的整个流转过程基于事件驱动。节点进入、节点离开、任务激活、任务结束——每个关键时刻都发布事件监听器们各取所需地响应。价值新需求比如审批通过后自动发企业微信通知只需新增一个事件监听器核心流转逻辑不受影响。5.4 门面模式ProcessServiceManager作为引擎的统一入口屏蔽了内部复杂度。外部调用者不需要知道 PVM、原子操作、执行路径这些概念只需调用startProcess()、completeWorkitem()等语义明确的方法。价值降低使用门槛同时保护内部实现细节后续重构不影响外部调用方。六、架构的核心原则回顾整个架构设计可以提炼出五条原则它们共同构成了这套系统的设计哲学原则一关注点分离引擎核心只管流转不管业务。PVM 不知道什么叫审批通过它只知道当前节点结束了沿着路由走到下一个节点。审批逻辑是挂在节点上的 Behaviour 去执行的。原则二依赖倒置上层依赖接口下层实现接口。引擎层定义ActivityBehaviour接口业务层提供实现。不是引擎调用业务而是引擎调用接口接口背后是什么它不关心。原则三小步快走复杂流转 多个原子操作的链式组合。一次审批通过并流转到下一节点看似一步操作实际分解为结束当前任务 → 找到下一路由 → 启动下一节点 → 执行节点行为。每步都是独立、可跟踪、可回滚的小操作。原则四显式状态所有状态必须显式表达不允许隐含状态。执行路径的六种状态ACTIVE/WAITING/SUSPENDED/ENDING/ENDED/CONCURRENT互斥且完备。不存在既是等待又是激活的模糊情况。这种严格的状态机设计是流程可靠性的基石。原则五可观测性每个关键动作都留下痕迹。事件机制不仅是扩展机制也是观测手段。流程启动、节点进入、任务创建、操作完成——都有对应的事件。监控系统可以监听这些事件来构建执行轨迹、性能仪表盘和异常告警。
延伸阅读

更多相关文章

2026/11/12 8:29:37

Sandboxie-Plus虚拟化技术解决软件授权机器码变动问题

1. 项目概述:Sandboxie-Plus如何解决机器码变动问题付费软件授权验证机制中,机器码绑定是最常见的反盗版手段之一。系统会根据硬件配置生成唯一识别码,软件厂商通过验证这个"指纹"来限制安装设备数量。但问题在于——某些情况下&am…

2026/11/12 8:29:37

计算机考试-结构体-对称矩阵—东方仙盟

Structures, Unions and User-Defined Data Types[Exam Point 1] Definition and Declaration of Structure Variables1. Structure Declarationc运行struct StructureName {TypeIdentifier MemberName;TypeSpecifier MemberName;... };2. Declaration of Structure Variables(…

2026/11/12 8:29:33

电工证复审报名地址2026河南最新政策怎么查

电工证复审报名地址2026河南最新政策怎么查 怕考不过白交培训费,2026年河南最新政策下,电工证复审报名地址必须提前搞清楚。别再稀里糊涂花冤枉钱了,这次我来帮你把关。 电工证复审报名地址怎么查? 2026年河南最新政策中,…

2026/11/12 8:29:33

特种电工证特训营费用在哪考 一次性讲透实操考试避坑指南

特种电工证特训营费用在哪考 一次性讲透实操考试避坑指南 你是不是也这样?实操考试心里没底怕挂科,一想到特种电工证要动手操作就紧张得睡不着,生怕一个操作失误就凉了?别急,今天咱们就聊聊【特种电工证特训营费用】,还有怎么【在哪考】,从漯河的小伙…

2026/11/12 8:24:31

黎平特种作业操作证怎么考不花冤枉钱 电子证书真靠谱吗

黎平特种作业操作证怎么考不花冤枉钱 电子证书真靠谱吗 怕考不过白交培训费?现在很多人想考特种作业操作证,但又担心培训机构套路多、考试难、证书没用,最后钱花了还拿不到证。其实只要方法对了,考特种作业操作证完全可以避开这些坑,尤其是像【黎平特种…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑