camunda_11_connector
Camunda 的 service task 推薦使用 external task, 它有很多優(yōu)點(diǎn):
- 流程引擎可以做到輕量級(jí), 流程引擎實(shí)例可以支持更多的業(yè)務(wù).
- 解耦流程引擎和業(yè)務(wù)代碼, 以后的升級(jí)和部署將非常方便.
- 借助external task SDK, 業(yè)務(wù)代碼實(shí)現(xiàn)也非常簡(jiǎn)單
- external task 采用 pull 模式, 由 external task worker 采用輪訓(xùn)機(jī)制pull服務(wù)請(qǐng)求, 會(huì)有一定的延時(shí).
Connector 總體優(yōu)勢(shì)不如 external task, 但我們可以通過(guò)Connector 對(duì)接已有的 http 服務(wù), 特點(diǎn)是:
- 復(fù)用已有的 http 業(yè)務(wù)服務(wù), 業(yè)務(wù)代碼和流程引擎做到了一定程度的解耦.
- 流程引擎采用 push 機(jī)制調(diào)用外部 http 接口, 如果這樣的task較多, 流程引擎的壓力會(huì)較大.
啟用 connect plugin
- 官方發(fā)布的 camunda platform預(yù)編譯包默認(rèn)已經(jīng)啟用了 connect plugin插件.
- 自建流程引擎項(xiàng)目, 需參考 connectors 官網(wǎng) 引入必要的jar, 并啟用connect plugin.
使用
- Service Task 組件設(shè)置:
- type : connector
- connector Id, 如果是Rest 接口, 設(shè)置為
http-connector, 如果是 SOAP, 設(shè)置為soap-http-connector
- connector inputs設(shè)置 :
- 變量1: url, 類(lèi)型為 string, 取值為 http 地址
- 變量2: method, 類(lèi)型為 string, 取值為 GET/POST/PUT/DELETE/PATCH
- 變量3: headers, 類(lèi)型為 map, 一般需要增加如下幾個(gè)header
(1) key: Content-Type, value: text/plain
(2) key: Accept, value: application/json - 變量4: payload, 類(lèi)型為 string, 取值為請(qǐng)求體內(nèi)容
- connector outputs 設(shè)置 :
http connector 返回三個(gè)data, 分別是 response/headers/statusCode, 注意不能在普通outputs變量區(qū)訪問(wèn)者三個(gè)數(shù)據(jù), 必須要在connector outputs 區(qū)使用才行. 我們可以通過(guò)java表達(dá)式或javascript的方式訪問(wèn)這幾個(gè)信息, 并把它們作為process variable 暴露出來(lái).
(1) java 表達(dá)式寫(xiě)法示例:
輸出變量v1, 表達(dá)式為:${response.length>4000?response.substring(0,4000)"response"}
輸出變量v2: 表達(dá)式為:${response.getBytes("UTF8")}
輸出變量v3: 表達(dá)式為:${JSON(response)
輸出變量v4: 表達(dá)式為:${XML(response)
(2) javascript 腳本寫(xiě)法示例:
javascript 腳本可以寫(xiě)多行, 所以可以比java表達(dá)式實(shí)現(xiàn)更復(fù)雜的邏輯, javascript 腳本最后一行應(yīng)該是一個(gè)表達(dá)式, 而且不能帶分號(hào), 該表達(dá)式將作為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屬性

浙公網(wǎng)安備 33010602011771號(hào)