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

  1. 官方发布的 camunda platform预编译包默认已经启用了 connect plugin插件.
  2. 自建流程引擎项目, 需参考 connectors 官网 引入必要的jar, 并启用connect plugin.

使用

  1. Service Task 组件设置:
  • type : connector
  • connector Id, 如果是Rest 接口, 设置为 http-connector , 如果是 SOAP, 设置为 soap-http-connector
  1. 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, 取值为请求体内容
  1. 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属性

参考

posted @ 2022-10-04 22:42  harrychinese  阅读(270)  评论(0编辑  收藏  举报