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-broker-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
参考
https://docs.zeebe.io/introduction/quickstart.html