工作流引擎技術介紹-Flowable例子(四)
介紹目前開源工作流現狀 介紹flowable 介紹BPMN2.0 比較flowable和activiti flowable例子(一)-工時申報流程 flowable例子(二)-請假流程 flowable例子(三)-保險索賠案例流程 flowable例子(四)-消息隊列交互流程 flowable例子(五)-消費者評論分析流程 flowable不足及擴展 Flowable技術細講
?? ? 在 Flowable 6.5.0 中添加了一個新引擎:Flowable 事件注冊表。這支持從任何來源接收和發(fā)送事件,并為 JMS、Kafka 和 RabbitMQ 提供開箱即用的支持。此外,可以通過 HTTP 接收事件。看完本篇,你就能知道Flowable工作流中集成消息隊列并實踐應用是很簡單的事情。(本篇介紹使用ActiveMq以及kafka,對于RabbitMQ 官方就推薦任務調度器使用,以后技術細節(jié)再細講集成)

先看看流程結合消息隊列的基本配置及使用
環(huán)境:
1.安裝ActiveMq
docker search activemq2.docker pull webcenter/activemq3.docker?run?--name?activemq?-p?61616:61616?-p?8161:8161?-d?webcenter/activemq4.docker?container?update?--restart=always?容器id?//設置容器隨docker啟動ActiveMQ安裝啟動好,訪問http://ip:8161/admin,登錄名和密碼都是admin(在配置文件中可修改)
2.程序配置

流程設計:

1.啟動節(jié)點配置接收到ActiveMq隊列消息則啟動一個實例

其中包括事件鍵和名稱、通道鍵與名稱,重要的參數就是隊列的key,以及消息內容如何映射到流程變量。在此示例中,將在名為testQueue的 JMS 隊列上接收事件。
參數映射:(客戶編號、產品名稱)

2.當流程實例以myEvent事件消息啟動時,第一個等待狀態(tài)是用戶任務,附加了一個中斷邊界消息事件。

邊界消息事件配置類似前面的消息啟動事件。不過多了一個相關參數,相關參數是用來過濾消息的,匹配上的消息才能被本流程實例識別。

參數映射:(客戶名稱)

相關參數:(這里取啟動時參數CustomerId)

3.邊界任務沒啥特殊的
4.發(fā)送消息任務
發(fā)送任務節(jié)點會有兩個事件
一個從流程發(fā)送信息到消息隊列

發(fā)送消息到消息隊列,則是需要將流程變量映射消息參數,這里我們只取客戶名稱。

一個從消息隊列接收消息觸發(fā)

消息參數映射流程變量(產品、金額)

5.最后一個任務,我們掛載一個表單,對從消息隊列取到的數據進行展示


演示運行過程:
1.當我們發(fā)布設計好的流程應用,首頁應用墻會出現我們設計的應用

同時,事件訂閱已經生效,在ActiveMq管理端能看到隊列及消費者。(當然,我們看到邊界和觸發(fā)隊列及消費者依然在,說明一旦啟動訂閱,鏈接應該是一直存在的)


2.向ActiveMq消息隊列testQueue中插入一條數據
消息內容:
{???"customerId":?"2","productNumber": "土豆仙"}

3.發(fā)送成功后,我們可以看到流程已經創(chuàng)建了一條實例,并停留在第一個任務上。

也可以查詢對應實例的參數,可以發(fā)現參數也正確的從消息隊列傳到了流程變量

4.繼續(xù)往邊界隊列里插入一條數據
消息內容:
{"customerId": "2","customerName": "土豆仙"}
流程觸發(fā)中斷邊界消息,走到邊界任務

5.審核通過邊界任務,我們會發(fā)現,流程往消息隊列發(fā)送了一條數據,并停留在發(fā)送消息任務節(jié)點。


6.繼續(xù)往triggerQueue插入一條數據
數據內容:
{"customerId": "2","productName": "土豆仙產品","amount": 100}

7.流程接收到消息隊列的消息,流程繼續(xù)往下走到最后一個任務

同時最后一個任務也以表單的形式將多次消息隊列獲取到的數據展示了出來

至此,我們基本完成了集成消息隊列,并使用Flowable與消息隊列交互的過程。后面,我們會看看更復雜的例子。
