知识卡片
流程间通信跨越边界:调用活动只在边界内,API调用才能跨边界
内容
流程之间的通信有两种基本方式,各自的适用边界完全不同。调用活动:利用BPMN结构直接调用同一工作流引擎上部署的另一个流程,父流程会一直等到子流程完成,子流程还能发出预定义事件(错误、升级)反向通知父流程,多数工作流平台的运维工具原生支持展示调用层级结构、优雅处理某层流程的取消。它的优点是开发运维都简单——调用流程就像指定一个流程定义名称一样容易;但代价是”提供API的是工作流引擎本身”,这意味着这个机制只有在业务服务也使用BPMN、且和被调用流程运行在同一个工作流引擎上时才能用——换句话说,只有当双方处于同一边界(同一上下文/同一服务)内才该用它,跨边界复用另一个服务里的流程完全不合适。API调用:向另一个服务发起普通API调用(REST/SOAP/消息系统等),被调服务在内部自行启动流程实例,调用方甚至完全不知道对方在用工作流引擎——这才是跨越服务间边界该用的方式,只要API保持向后兼容,被调方可以随意修改内部实现(包括是否继续用工作流引擎)而不影响调用方。简言之:调用活动用来在边界内部隐藏细节或复用流程,API调用用来跨边界通信,两者不可混用。
结构图:
flowchart TD
A[流程间通信的两种方式] --> B[调用活动<br/>BPMN结构,同一工作流引擎内]
A --> C[API调用<br/>REST/SOAP/消息系统]
B -->|适用| B1[同一边界/同一上下文内部<br/>隐藏细节或复用子流程]
B -->|不适用| B2[跨服务/跨上下文复用]
C -->|适用| C1[跨越服务间边界<br/>调用方无需知道对方用工作流引擎]
C -->|优势| C2[被调方可自由改内部实现,只要API向后兼容]
参考来源
- 位置:《流程自动化实战:系统架构和软件开发视角》第7章《自治、边界和隔离》"7.4 流程间通信如何跨越边界""7.4.1 调用活动""7.4.2 使用API调用跨越边界"(源文件:_epub-src/EPUB/xhtml/Section0001_0011.xhtml)
- 结论依据:原文明确调用活动"提供API的是工作流引擎"因此只适用于同一工作流引擎/同一边界的场景,而API调用让调用方完全不知道对方是否使用工作流引擎、适合跨边界通信,直接支撑本卡片的结构图与解释。
- 原始内容:只有当你的业务服务也使用BPMN时,你才能使用这个机制。不仅如此,只有当你的业务服务与文档服务在同一个工作流引擎上运行时,你才能使用这个机制……业务服务甚至不必知道文档存储使用的是工作流引擎。