zeebe簡介
1、zeebe是什么?
Camunda公司研發的工作流引擎Zeebe,目標是對微服務的編排。具體詳細介紹可以參考官網:https://docs.zeebe.io/introduction/what-is-zeebe.html
2、背景
隨着微服務的發展,大家都單體服務進行了拆分,解耦,這樣做引發了另外的一個問題:之前一個接口實現的功能,現在需要調用幾個接口才能完成。如何解決這些原子性的接口呢?
這時候我們想到了Zeebe服務。
安裝以及快速入門
1、官網上下載zeebe發行版https://github.com/zeebe-io/zeebe/releases
我這里使用的是0.20.0版本https://github.com/zeebe-io/zeebe/releases/tag/0.20.0,下載最新版本的zeebe好像會和我的JDK(1.8)不兼容,具體我還沒深究。。
2、將本地的zeebe壓縮包上傳到Linux虛擬機
3、進一步解壓壓縮文檔,並進入對應目錄下
sudo tar -zxf zeebe-distribution-0.20.0.tar.gz -C /usr/local cd /usr/local/zeebe-distribution-0.20.0
4、啟動zeebe代理
查看bin目錄下的內容
ls -l ./bin
使用以下的命令啟動zeebe代理
sudo ./bin/broker #沒有sudo會提示權限不夠
啟動之后,將會看到一些輸出,下圖是一部分的截圖
注意這三個端口不要被占用,否則會報錯!
接着,我們需要打開另一個終端以使用Zeebe CLI執行命令zbctl
類似於下圖
5、現在我們可以輸入以下的命令查看zeebe代理的狀態
./bin/zbctl status
輸出如下
6、部署工作流程
一個工作流程是用來協調松散耦合的工作人員和他們之間的數據流。
在本指南中,我們將使用示例過程order-process.bpmn
。可以使用以下鏈接下載它:https://docs.zeebe.io/introduction/order-process.bpmn
該過程描述了依次執行以下三個任務的流程:“收款”,“取貨”和“運送包裹”。如果order-process.bpmn
在文本編輯器中打開文件,您將看到每個任務都有type
XML中定義的屬性,該屬性以后用作作業類型。
<!-- [...] --> <bpmn:serviceTask id="collect-money" name="Collect Money"> <bpmn:extensionElements> <zeebe:taskDefinition type="payment-service" /> </bpmn:extensionElements> </bpmn:serviceTask> <!-- [...] --> <bpmn:serviceTask id="fetch-items" name="Fetch Items"> <bpmn:extensionElements> <zeebe:taskDefinition type="inventory-service" /> </bpmn:extensionElements> </bpmn:serviceTask> <!-- [...] --> <bpmn:serviceTask id="ship-parcel" name="Ship Parcel"> <bpmn:extensionElements> <zeebe:taskDefinition type="shipment-service" /> </bpmn:extensionElements> </bpmn:serviceTask> <!-- [...] -->
首先,輸入以下的命令,將工作流部署到Zeebe代理
./bin/zbctl deploy order-process.bpmn
輸出如下
輸出信息中的“version”:1表示我是第一次部署order-process.bpmn這個文件。
7、創建工作流實例
部署工作流后,我們可以創建它的新實例。工作流的每個實例都是工作流的單個執行。工作流的每個實例通常都處理某種數據。啟動實例時,可以將實例的初始數據指定為變量。
創建一個新實例,我們必須從BPMN文件中指定流程ID,使用以下命令指定流程的ID
./bin/zbctl create instance order-process --variables '{"orderId": 1234}'
輸出如下
8、完成工作流程實例
為了完成實例,必須執行所有三個任務。在Zeebe中,將為工作流實例執行期間完成的每個任務創建一個作業。為了完成一項工作,從而完成相應的任務,必須由工作人員激活並完成它。作業工人是一個壽命很長的過程,它反復嘗試激活給定作業類型的作業,並在執行其業務邏輯后完成作業。作業工作者將為每個作業接收工作流實例變量作為JSON對象, 如果成功處理了作業,則還必須作為JSON對象返回其結果。
為了完成一個工作流實例我們現在要創建一個作業工人每個從工作流定義三個任務類型:payment-service
, inventory-service
和shipment-service
。並使用cat命令輸出信息。
./bin/zbctl create worker payment-service --handler cat & ./bin/zbctl create worker inventory-service --handler cat & ./bin/zbctl create worker shipment-service --handler cat &
依次執行以下的三條命令,輸出信息依次如下
9、要關閉所有作業工人,可以使用kill
命令停止后台進程
kill %1 %2 %3
如果要可視化工作流實例的狀態,可以啟動(zeebe簡單監視器)https://github.com/zeebe-io/zeebe-simple-monitor