camunda_11_connector
Camunda 的 service task 推荐使用 external task, 它有很多优点:
- 流程引擎可以做到轻量级, 流程引擎实例可以支持更多的业务.
- 解耦流程引擎和业务代码, 以后的升级和部署将非常方便.
- 借助external task SDK, 业务代码实现也非常简单
- external task 采用 pull 模式, 由 external task worker 采用轮训机制pull服务请求, 会有一定的延时.
Connector 总体优势不如 external task, 但我们可以通过Connector 对接已有
的 http 服务, 特点是:
- 复用已有的 http 业务服务, 业务代码和流程引擎做到了一定程度的解耦.
- 流程引擎采用 push 机制调用外部 http 接口, 如果这样的task较多, 流程引擎的压力会较大.
启用 connect plugin
- 官方发布的 camunda platform预编译包默认已经启用了 connect plugin插件.
- 自建流程引擎项目, 需参考 connectors 官网 引入必要的jar, 并启用connect plugin.
使用
- Service Task 组件设置:
- type : connector
- connector Id, 如果是Rest 接口, 设置为
http-connector
, 如果是 SOAP, 设置为soap-http-connector
- connector inputs设置 :
- 变量1: url, 类型为 string, 取值为 http 地址
- 变量2: method, 类型为 string, 取值为 GET/POST/PUT/DELETE/PATCH
- 变量3: headers, 类型为 map, 一般需要增加如下几个header
(1) key: Content-Type, value: text/plain
(2) key: Accept, value: application/json - 变量4: payload, 类型为 string, 取值为请求体内容
- connector outputs 设置 :
http connector 返回三个data, 分别是 response/headers/statusCode, 注意不能在普通outputs变量区访问者三个数据, 必须要在connector outputs 区使用才行. 我们可以通过java表达式或javascript的方式访问这几个信息, 并把它们作为process variable 暴露出来.
(1) java 表达式写法示例:
输出变量v1, 表达式为:${response.length>4000?response.substring(0,4000)"response"}
输出变量v2: 表达式为:${response.getBytes("UTF8")}
输出变量v3: 表达式为:${JSON(response)
输出变量v4: 表达式为:${XML(response)
(2) javascript 脚本写法示例:
javascript 脚本可以写多行, 所以可以比java表达式实现更复杂的逻辑, javascript 脚本最后一行应该是一个表达式, 而且不能带分号, 该表达式将作为process variable的取值.
输出变量v1, 脚本为:
connector.getVariable("response").substring(0,4000)
输出变量v2, 脚本为:
var response=connector.getVariable("response");
var responseObj=JSON.parse(response);
var attr1=responseObj.attr1;
attr1 //返回json中的attr1属性
输出变量v3, 脚本为:
var response=connector.getVariable("response");
var json=S(response);
var attr1=json.prop("attr1").stringValue();
attr1 //返回json中的attr1属性