BPMN Process Token与Gateway——Camunda Workflow 开发实践(二)

前言

最近工作在用Camunda搞Workflow,认识到了一种全新的程序设计理念。它将程序分为两种:Task和Process。Task只提供服务,Process只负责流程,它俩彼此并不知道且不关心对方的存在,实现了业务流程与代码的解耦。

接下来,我以自己浅薄的碎片化知识,来讲下它是怎么玩的。

Notes:Camunda 支持Java和JS,以及REST Api。

开发环境

  • 按照官网介绍安装Camunda (流程引擎) localhost 登录地址
  • 安装Camunda Modeler(BPMN 流程编辑器)
  • Postman

BPMN文件也可以用VS Code之类的工具打开,它其实是XML。

排他网关

上图菱形中间有个X的是一个排他网关,排他指的是它只会选择一个出口(only one sequence flow is selected )

正如上图所示,每条线都加了对应条件(else 表示默认),

  • 假如满足多个条件,它只会选择最先定义的那个。
  • 假如没有满足任一条件,它会选择else;如果没有定义else,会导致异常。

Notes:假如排他网关有多个输入,那么满足其中一个就会往下走,不会等待其他。

包容网关

上图菱形中间有个⚪的是一个包容网关。它的出口可以同时满足多条线的条件,并且会fork流程,满足条件的线会并行得到执行。

Notes:包容网关有两个输入(Join),这时要分情况来判断。

假如上图paymentReceived = false,而shipOrder = true,那么两个条件都满足,这时Ship Order 和 Receive order两个User Task 都会被激活。此时包容网关会等待两者都完成才会往后进行。

假如paymentReceived = false,而shipOrder = false,那么只有Receive order 会被激活。此时包容网关只会等待Receive order完成。

官方原文是: the gateway will first join all incoming sequence flows that have a process token. Process Token是一个比较抽象的概念,我后面会写一个博客专门来学习。

并行网关

并行网关的出口(outgoing sequence flow)是不能带条件的,每条线都会并行得到执行。

并行网关也会等待所有条件到达才会往下执行,但这里有个坑。

Notes:并行网关在等待的时候,只看到达的sequence flow数量!也就是说,假如Receive payment任务执行两次,那么它就不会再等待Ship order,而是直接往下进行。如果有流程回退操作,需要考虑这一点。

the gateway triggers as soon as the following holds: The number of arrived tokens is equal to the number of incoming sequence flows. It is not required that a token arrives on every incoming flow.

用户任务

 用户任务通常是一些需要人工确认(confirm)的任务。当我们的流程实例(Process Instance)激活了一个用户任务之后,我们可以直接在Camunda Tasklist面板来结束它,当然你也可以用代码实现。

Notes:先Claim,添加需要的Output Parameters,然后Complete

服务

Service Task 通常用来执行外部任务,也就是需要程序员实现的部分。使用Java代码可以直接监听Service Task的创建事件并进行逻辑处理。比如增加一条审批记录,或者帮财务完成自动打款。

接下来,我们讲一下如何用REST Api来完成:Camunda Docs

打开Postman 按顺序调用以下接口:

Get List -> Fetch and Lock  -> Complete

每个Service Task 都需要用workerIdlock才可以,而且应该指定一个lock时间, workerId 可以是任意字符串,但是Complete的时候,必须使用相同的workerId 才可以结束。

Message Event

上面给大家演示了下一个简单的Message Event怎么创建的,这个Message Event就和服务关联起来了。你可以自行设置收到Message Event之后的Workflow。

当服务已经激活时,使用Postman调用:Event Subscription | docs.camunda.org查询当前服务正在监听的Events, 你可以看的定义的Message Event,然后使用 Message | docs.camunda.org

来模拟一个事件,当前Task收到事件之后,会执行事件逻辑,而忽略其他出口。

Notes:Postman 使用 basic auth模式进行身份认证即可。

开启一个Workflow Instance

在Camunda Modeler画好workflow,起个名字,点左下角Deploy。

到 点右上角Start Process,选择已部署的workflow,

Add Variables: 添加所需要的变量

然后到 Camunda Cockpit | Dashboard就可以看到process实例创建成功了。

Camunda Workflow BPMN 入门开发实践相关推荐

  1. eBPF 入门开发实践指南三:在 eBPF 中使用 fentry 监测捕获 unlink 系统调用

    eBPF (Extended Berkeley Packet Filter) 是 Linux 内核上的一个强大的网络和性能分析工具.它允许开发者在内核运行时动态加载.更新和运行用户定义的代码. 本文是 ...

  2. 计算机编程书籍-Python硬件开发树莓派从入门到实践无人驾驶 AndroidTV 自动循迹

    内容简介 <Python硬件开发树莓派从入门到实践>全书可大致分为4个部分,其中第13章介绍了树莓派的基本使用:第4章介绍了如何在树莓派上使用Python的OpenCV包:第58章介绍了树 ...

  3. c++整理程序 dev_C编程从入门到实践:C语言开发工具详解(2)

    DEV C++是一款经典的轻量级C语言开发工具,其安装大小只有几十兆,并且具有图形视图界面,操作比较容易.在DEV C++编码界面中可以使用复制和粘贴等命令,这提高了开发效率. 2.3.1安装DEV ...

  4. arcore之路-unity开发从入门到实践_AR开发之路——准备工作

    由于现在支持AR功能的手机没有普及,讲AR开发的教程也少,所以要学习AR开发还是要花点成本的,当然也有好处,花了学费,才会逼着自己坚持学下去. 为了学习AR,Relax今天入手了一部华为Nova 3i ...

  5. MOOC微信小程序开发从入门到实践~笔记

    MOOC微信小程序开发从入门到实践~笔记 1.图标网站[icon]www.iconfont.cn 2.新建项目是必须需要AppID 3.app.js是页面逻辑文件 app.json是页面全局配置文件( ...

  6. Python编程:从入门到实践+爬虫开发与项目实战+网络编程基础+项目开发实战

    给还在苦苦自学Python的小伙伴们分享一波学习教程~有了它们,至少能节省50%的时间,少走一半的弯路. 书不在多,而在于精~ <Python编程:从入门到实践>豆瓣评分9.2 本书是针对 ...

  7. ROS入门——胡春旭老师《机器人开发实践》在ROS-Melodic下的编译

    入门ROS系统,网上接触到的资料大部分都跟古月有关,故买来胡春旭老师(古月)的书籍<机器人开发实践>拜读.书中对仿真以及真实机器人同步做介绍,能一步一步跟着操作下来,非常适合入门.但由于书 ...

  8. dev c++如何恢复默认设置_C编程从入门到实践:C语言开发工具详解(2)

    DEV C++是一款经典的轻量级C语言开发工具,其安装大小只有几十兆,并且具有图形视图界面,操作比较容易.在DEV C++编码界面中可以使用复制和粘贴等命令,这提高了开发效率. 2.3.1安装DEV ...

  9. 《Python+Kivy(App开发)从入门到实践》自学笔记:打包——Windwos打包

    章节目录及知识点总览 6.1 Windows打包 将python程序编译成可以在windows上运行的.exe程序. 操作过程中踩过的坑: 1.书上使用的测试文件没找到(使用画板程序测试) 2.通过6 ...

最新文章

  1. cocos2d-x中的curl
  2. ansys怎么合并体_亚马逊合并拆分变体实操(干货)-合并
  3. 编程技巧:使用异或操作符(XOR)交换两数值
  4. Nginx+Tomcat负载均衡、动静分离集群
  5. SAP Spartacus的double maintenance -使用Cherrypick进行维护工作
  6. 初识NIO之Java小Demo
  7. Java多线程--死锁例子
  8. Docker学习总结(21)——Docke网络bridge详解
  9. JZOJ 1236. 邦德I
  10. 一家独大的亚马逊,让人恐慌?
  11. windows03系统安装08sql数据库
  12. Linux tcp_timestamps相关
  13. c++11新特性_c++11(7)新特性之继承构造函数
  14. dbc2000 注册机|dbc2000 注册码注册机下载
  15. Linux 2.6.19.x内核编译配置选项简介
  16. python keys方法_Robot Framework selenium操作键盘press keys方法详解(Python篇)
  17. 简单的通过DockerFile 构建自己的nacos镜像 并持久化到 MySQL8.0
  18. 机器学习_评价指标Accuracy(准确率)、Precision(精准度/查准率)、Recall(召回率/查全率)、F1 Scores详解
  19. 2. IMU原理及姿态融合算法详解
  20. Python(1)概述与基础

热门文章

  1. vscode 函数定义跳转与回退
  2. LeetCde_571、超级洗衣机
  3. 实现VMware Horizo​​n+负载均衡(AVI)(一)
  4. linux 下 kmplayer 安装。。
  5. Fedora 14 安装 mplayer + kmplayer
  6. MyEclipse下载地址全攻略
  7. 北大青鸟ACCP初学java
  8. 免费集装箱号识别API免费集装箱信息识别,中国人工智能企业CIMCAI集装箱识别云服务全球4千企业用户,中国人工智能企业智慧港航
  9. latex公式:列向量、矩阵、方程组
  10. maven打包配置详解