工作流引擎一直都没有纳入我的知识范围,所以我并没有玩过jbpm, activiti这种传统的工作流引擎。无奈业务永远都做不完,所以终于要对BPM下手了。
1. 环境准备
截止到2020年10月19日,kogito最新版本是Pre-release 0.17.0,正式版1.0还在beta阶段。中文资料还太少,学习主要是从官方文档下手。还好kogito提供了很多的示例来满足一个工作流小白对这个框架的初体验。
$ git clone https://github.com/kiegroup/kogito-examples.git
准备工作可没这么简单,你还需要
- IDE: VSCODE(官方推荐)+ kogito插件
- JDK 11,为了避免一些可能存在的麻烦,我使用了openjdk 当下最新的15版。
- MAVEN 3.6.2 or later
2. 示例:hello-world
2.1 运行示例
example项目下第一个示例,定义了一个脚本流程,如下图所示。
我们为这个流程指定一个唯一的process-id叫作:
// 流程说明
1.开始-入参name
2.脚本任务-SayHello,java,System.out.println("Hello " + name);
3.脚本任务-UpdateMessage,java,kcontext.setVariable("message", "Hello " + name);
4.结束
如果前面环境都准备好,可以通过下面的命令,运行这个服务了。
$ cd /process-scripts-springboot
$ mvn spring-boot:run
2.2 流程调用
流程通过bpmn文件定义,包含了要处理的数据,工作步骤的定义。在这个示例中,这个流程通过springboot封装为一个http服务。调用的uri就是上面指定的process-id。
- 发出请求
打开另一个terminal,通过curl请求,当然也可以使用postman
# http request
$ curl --location --request POST '127.0.0.1:8080/scripts' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "GG"
}'
- 服务端输出
这是脚本任务1的输出
# output from console
Hello GG
- http返回的响应
# http response
{
"id":"2bf9ca54-4b66-4a75-8147-b823659ebad1","name":"GG","message":"Hello GG"}
2. 流程图解析
既然我是工作流引擎的小白,自然是不懂工作流建模语言了。所以bpmn文件自然是要学一下的。
在这个HelloWorld示例中,仅涉及到了三个不同的对象
- 开始节点,标记一个流程的开始
- 脚本任务,任务类型的一种,意为通过脚本完成固定的操作。
- 结束,是一个十万年魂环
- 数据
在这个示例中,声明了两个参数,作为入参和出参。后面可以看到更复杂的对象定义和引用。
String name
String message
来源:oschina
链接:https://my.oschina.net/u/4375980/blog/4775785