一篇偏工程视角的对照分析:把节点的执行方式枚举与 BPMN 的任务、作业模型放在同一张表里比较,覆盖建模单元、调度驱动、失败恢复与过程可视化,并说明各自优化的方向与付出的代价。
三家都在解决同一件事:人工等待与系统继续如何在一条流程里共存。分歧不在「有没有自动节点」,而在建模单元和调度哲学。
维度 | 该 BPM 平台 | Flowable / Camunda |
|---|---|---|
建模单元 | 同一类节点 + 「节点的执行方式」枚举 | 不同 BPMN 元素(User Task、Service Task、Script Task、External Worker…) |
驱动方式 | 以 发送(Send) 为步进;执行方式决定下一次发送由谁触发 | 以 令牌(token)到达活动 为步进;活动类型决定等待还是继续 |
人工隔离 | 机器执行不进普通待办、默认不推到达消息 | User Task 进 Tasklist;Service Task 本来就不会进人工任务列表 |
系统调度 | 机器:扫描待办定时发送;过程:当次请求内同步连发 | 作业执行器 / Job Worker:加锁、重试、事故(incident);External Task 由外部工人拉取 |
人机兜底 | 混合执行为一等能力(打开表单先试发,失败留给人) | 无同名一等元素,通常拆成网关 + 自动活动 + 用户任务,或监听器里 Complete |
工位场景 | 流水线执行独立待办通道 | 无标准元素,需自研任务列表与完成 API |
过程可见 | 业务人员看过程执行页(时间轴 / 流程图) | 运维人员看 Cockpit / Operate / 历史活动;业务页需自建 |
标准与生态 | 产品内约定,学习成本低,互换性弱 | BPMN 2.0 可互换、生态大,学习与建模成本高 |
Flowable / Camunda 这边,作业可靠性、多语言工人、标准互操作更完整。该平台这边,执行策略挂在同一类节点上,过程观测是给业务人员看的,不是给运维控制台看的。选型看场景,不要按「谁更 BPMN」打分。
企业流程里常见五类诉求,三家都能做,只是落点不同:
Flowable / Camunda 的答案来自 BPMN:换一种图元。用户任务是等待态;服务任务是自动态(同步委托或异步作业);定时用中间事件;外部系统用 External Task / Job Worker。图上信息量大,语义精确,实施人员要熟悉规范。
该平台的答案来自属性:不换图元,改执行方式。设计器仍是同一个节点,下拉五种方式。发送引擎、待办表、消息、定时任务、过程页读的是同一列。实施人员改枚举,开发人员改事件。
两种设计都自洽。前者优化 规范表达与引擎内核;后者优化 中国审批 + 集成 + 低代码配置的同一套节点生命周期(接收人、方向条件、退回、轨迹仍然在)。
| 对照维度 | Flowable / Camunda | 该 BPM 平台 | | --- | --- | | 建模单元 | User Task / Service Task / External Worker / Timer Event 等不同图元 | 同一类节点 | | 执行者归属 | 由节点类型直接决定 | 由节点上的「执行方式」枚举决定 | | 可枚举的执行者 | 取决于所选图元 | 操作员 / 机器 / 混合 / 流水线 / 过程 |
属性定义在节点上,发送生成待办时 抄到待办行。运行时调度读待办行,而不是每次再解析流程图。这是设计上的关键:执行方式是运行时状态,延期发送才能把一条人工待办临时改成机器通道,到期再发。
人处理、人发送。进待办,可达消息,轨迹按人工记录。对照 BPMN 的 User Task,语义最接近。差异在产品层:该平台的待办与表单、工具栏、审核组件是一体的;Flowable / Camunda 的 TaskService 是引擎 API,页面多由业务或 Tasklist 组装。
与 Job Executor 的相似处:都是 把继续流转从用户线程里拿出去。 不同处:Camunda / Flowable 的作业有 锁、排他、重试次数、到期时间、失败事故;该平台这条通道更粗——扫待办、发一次、失败记日志。可靠性模型更简单,也更容易和「延期发送」共用:人工把待办改成机器执行并写入延期时间,到点同一扫描任务发出,取消则原子清回人工态。
设计合理性:复用待办行当作业记录,不必再维护一张独立 job 表。代价是作业语义(重试退避、事故工作台、优先级队列)不如 BPMN 引擎成熟。
打开工作页时先尝试发送。成功则人已经站在下一节点;被方向条件、接收人、阻塞等挡住则静默失败,表单留给人。
BPMN 里要对等,通常是:
图上会变成两个活动。该平台坚持 一个节点两种命运:接收人、表单、退回规则不用配两遍。
设计合理性:贴近「填完就能过、过不了再改」的办公习惯。边界也清楚——试发发生在打开页面,不是到达瞬间;不适合代替真正的异步作业。
待办不进普通审批箱,走独立工位接口:按节点汇总、按工位列出、按日对账,发送可带二维码 / 单据号。
BPMN 没有工位图元。落地一般是 User Task + 自研扫码页 + taskService.complete。引擎不管「这个任务该出现在工位屏还是审批箱」。
设计合理性:执行方式直接决定 任务出现在哪条交互通道,而不仅是「谁 complete」。这是产品化,不是规范新增。MES / 车间过站值得用;普通审批不要滥用。
连续系统节点在 同一次发送请求内同步连发,明确不进定时扫描:
发送完成后
while 下一节点的执行方式 == 过程执行 且流程未结束 且存在待办:
切换到该待办处理人
以系统身份走完整发送(方向条件、接收人、发送前事件仍生效)
叠加本次过程返回
切回原操作员上一人工节点若配置「发送后转向」为过程执行页,则先打开大窗再并发发送。页面每秒拉轨迹:过程 / 人工标签、耗时、外部返回、并行分支;超过约一分钟提示外部系统仍在处理。
对照 BPMN:一串 Service Task 令牌也会自动往前走。差别在 事务与观测:
asyncBefore / asyncAfter,避免长事务与锁。 设计合理性:过程节点仍是节点——有接收人、有事件、失败停在具体节点——不是跳过引擎的脚本钩子。身份切到待办人再切回,审计主体仍是人。这与 BPMN 服务任务「引擎账号执行、活动上常无办理人」不同,更符合国内审批留痕习惯。
BPMN / 产品扩展 | 职责 | 与该平台大致对等 |
|---|---|---|
User Task | 人工等待,TaskService 查询、签收、完成 | 操作员执行 |
Service Task + 类 / 表达式 | 引擎内同步调用 | 过程执行中的发送前事件 / 过程(同请求) |
Service Task + async | 写入作业,Job Executor 续跑 | 机器执行(都是异步继续,实现粒度不同) |
External Task(Camunda 7)/ External Worker(Flowable)/ Job Worker(Camunda 8) | 外部进程按主题拉取、加锁、完成或失败 | 无直接一等对等;集成多写在事件里,由引擎线程或定时发送触发 |
Timer Intermediate Event | 到点继续 | 延期发送(待办改机器通道);图上可见性不如定时事件 |
Script / Business Rule Task | 脚本或决策表 | 无独立图元,规则在事件、条件、表单 |
Camunda 8 把「引擎内 JavaDelegate」基本拿掉,自动步骤默认是工人模型:扩展性、隔离性更好,运维模型也更重。该平台仍把自动步骤留在同一套发送里,部署形态更接近传统单体 BPM。
Flowable / Camunda 7 的异步延续,核心不是「自动」,而是 把一次令牌推进切成可恢复的作业:
该平台机器执行用待办扫描近似「有活就发」,没有同等的作业锁协议。集群下要靠服务部署约定,而不是引擎级 job lock。这一点对比必须写明:在高并发自动节点与失败恢复上,BPMN 作业模型更完整。
External Task 的类比是:服务任务也是一种「待办」,领取者不是人而是程序。fetchAndLock → 做事 → complete / failure。工人可多语言、可水平扩展,引擎不持有长调用。
该平台过程执行是引擎(或应用进程)在发送循环里直接调外部 API。耦合高、配置简单、过程页容易把返回贴回节点。工人模式要运维一套消费者;事件模式要守住超时与重试。
跨语言、长耗时、要独立扩缩的集成,用工人模型更合适。配置人员改节点就能串内部系统调用时,用该平台过程执行更合适。两条路的运维成本和失败恢复不一样,不要混着用同一套预期去验收。
该平台 | Flowable / Camunda 7 | |
|---|---|---|
实例 | 流程实例表 | ACT_RU_EXECUTION 等 |
人工任务 | 待办行(含执行方式副本) | ACT_RU_TASK |
自动继续 | 仍是待办行(机器 / 过程)或发送循环栈 | ACT_RU_JOB / 外部任务表 |
历史 | 轨迹表 | 历史活动 / 历史作业 |
该平台让 待办表身兼「人工任务」与「自动作业」(靠执行方式区分)。表更少,语义要靠枚举约束。BPMN 把任务与作业分表,查询清晰,模型更重。
延期发送能成立,正因为待办行可变:执行方式从操作员改为机器,参数里带延期时间。BPMN 更标准的做法是图上放 Timer,或把作业 due date 设到未来——图与作业表都看得见,待办不一定还在。
自动步骤若仍发「请审批」类到达消息,产品就是错的。该平台在消息模块对机器执行短路。Flowable / Camunda 通常根本不会给 Service Task 建 Task,自然也不会进 Tasklist;若在监听器里发业务消息,要实施自己区分。
两边都合理。该平台必须显式短路,因为机器节点 仍然生成待办行(只是查询排除);BPMN 服务任务 往往不生成 User Task。这是「同一套节点生命周期」带来的额外正确性义务,不是缺陷,但实现上必须守住。
该平台过程执行 | Camunda 同步委托 | Camunda / Flowable 异步作业 / Worker | |
|---|---|---|---|
失败位置 | 当前过程节点,返回带「系统执行发送」 | 当前活动,事务回滚范围取决于实现 | 作业 / 工人失败,实例停在该活动 |
重试 | 需再次发送或人工处理 | 同请求内难自动重试 | 引擎重试 + 事故 |
人怎么看 | 过程执行页失败态 + 返回原文 | 异常栈 / 业务自绘 | Operate / Cockpit |
过程页把集成报文展示给业务人员,这是该平台有意做的产品层。Cockpit 面向运维。两者不互相替代。
BPMN 用并行网关 + 多令牌,服务任务可在分支上各自异步。并行作业调度、合流同步是 BPMN 引擎的传统强项。
不要把「过程连发」理解成分流:连发是 同一路径上的同步序列;并行是 多令牌。配置错了会把长耗时外部调用塞进一次 HTTP。
代价:不是国际标准;工具链、人才、流程文件互换弱;作业协议简单;过程同步连发有超时上限。
代价:中国式审批(退回、加签、抄送、审核意见)要在 User Task 上大量扩展;「能过则过」要拆图;工位、过程时间轴要自建;对实施人员的规范门槛高。
场景 | 更贴该平台的用法 | 更贴 Flowable / Camunda 的用法 |
|---|---|---|
部门审批、退回、会签 | 操作员执行 | User Task + 自研审批扩展 |
夜间过账、不占待办 | 机器执行 | async Service Task 或 Worker |
打开即过、过不了再填 | 混合执行 | 网关拆分,或监听器 Complete(图更碎) |
工位扫码 | 流水线执行 | User Task + 自研工位端 |
人点发送后连续调内部 API,要盯进度 | 过程执行 + 过程执行页 | 一串 Service Task + 自建进度页;要可靠则每步 async |
跨语言、长耗时、需重试扩缩 | 不宜单靠过程同步连发 | External Task / Job Worker |
到点再发已填好的单 | 延期发送(改执行方式) | Timer 事件(图上可见) |
混合使用也常见:核心审批用该平台,超长集成用独立工人回写后「发送」推进。那是架构组合,不是某引擎的失败。
节点执行方式不是 BPMN 任务类型的对照表,问题切法就不一样:
复杂性放的位置不同。前者在规范和作业协议上,恢复力和生态更好;后者在一个枚举和发送循环上,配置面和过程页更直接。
实现上可以记成:同一节点、五种执行方式、同一套发送。机器靠待办扫描,过程靠当次连发,混合靠打开试发,流水线走工位接口。执行方式同时管待办过滤、消息和轨迹标签。
三家都会自动。差别是自动步骤还算不算原来那个节点,以及失败之后谁看见、谁重试。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。