Zeebe入门教程1
欢迎学习Zeebe入门教程。
我们将向您介绍一个端到端的Zeebe示例,包括在Zeebe Modeler中构建和配置工作流模型,部署模型,然后使用Zeebe命令行界面创建和处理实例,然后查看名为Operate的工具中发生了什么。
- 创建工作流
- 部署工作流
- 创建并完成实例
- 下一步和资源
如果您对Zeebe有任何疑问,我们加入zeebe qq交流群一起探讨。qq群号:856546010
Zeebe和Operate的入门教程
在本教程中,我们将指导您如何…
- 使用Zeebe Modeler为工作流建模
- 将工作流部署到Zeebe
- 创建工作流实例
- 使用工人完成由这些工作流实例创建的作业
- 将消息与工作流实例关联
- 监控正在发生的事情,并获取有关在Operate中运行工作流实例的详细信息
如果这是你第一次使用Zeebe,那么整个指南需要30-45分钟才能完成。
本教程假设您对Zeebe是什么以及它的用途有一些基本知识。如果你对Zeebe完全陌生,你可能会发现通读 zeebe工作流是个啥这篇文章。
下面是您将在本教程中使用的组件。请下载这些组件的完整发行版,而不是使用Docker运行它们。
- ZeebeModeler:一个桌面建模工具,在部署到Zeebe之前,我们将使用它来创建和配置我们的工作流。
- Zeebe Distribution::该程序包含我们将在其中部署工作流模型的工作流引擎;该引擎还负责管理活动工作流实例的状态。在这个发行版中包含了zeebe-cli,我们将在整个教程中使用它。请使用Zeebe 0.17.0。
- Camunda Operate: :用于监视和排除Zeebe中实时工作流实例故障的操作工具。目前,Operate可用于免费和不受限制的非生产用途。
- Elasticsearch 6.7.0: :一个开源的分布式数据存储,可以连接到Zeebe来存储工作流数据,用于审计、可视化、分析等。Camunda Operate使用ElasticSearch作为其基础数据存储,这就是为什么您需要下载ElasticSearch来完成本教程。Operate和Zeebe与ElasticSearch 6.7.0兼容。
如果您对Zeebe有任何疑问,可以加入zeebe qq交流群一起探讨。qq群号:856546010
使用Zeebe Modeler创建工作流
如果对于BPMN不熟悉,那么请在下面的操作开始之前,最好了解一下?这篇博客文章有助于解释这个标准,以及为什么它适合微服务编排。
ZeebeModeler是一个桌面建模工具,允许您使用BPMN 2.0构建和配置工作流模型。在本节中,我们将创建一个工作流模型,并准备将其部署到Zeebe。
我们将创建一个电子商务订单流程作为我们的示例,并且我们将为一个工作流建模,其中包括:
- 启动订单付款
- 从外部系统接收付款确认消息
- 根据订单价值在有或无保险的情况下装运订单中的项目
流程图如下:
付款任务和运输任务由我们将连接到工作流引擎的定时服务执行。“已收到付款”消息将由外部系统发布给Zeebe,然后Zeebe将消息关联到工作流实例。
开始
打开Zeebe Modeler并创建新的BPMN图。
将模型另存为order-process.bpmn,保存并将其放到上文提到的zeebe broker目录的顶层。提醒一下,这个目录叫做zeebe-broker-0.17.0
模型中的第一个元素将是一个开始事件,当您打开建模器时,它应该已经在画布上了。
标记模型中的所有元素是BPMN最佳实践,因此:
双击开始事件将其标记为“已下订单”,表示无论客户何时下订单,我们的流程都将启动。
接下来,我们需要添加一个服务任务:
单击开始事件并选择服务任务图标
将服务任务标记为“启动付款”
接下来,我们将配置“启动支付”服务任务,以便外部微服务可以处理它:
点击“启动付款”任务
展开屏幕右侧的“属性”面板(如果该面板尚不可见)
在“属性”面板的“类型”字段中,输入“启动付款”
这是您现在应该在建模器中看到的。
此类型字段表示Zeebe中的作业类型。在这一点上需要理解的几个重要概念:
- 作业只是工作流中的一个工作项,需要先完成该工作项,然后工作流实例才能继续执行下一步。
- 工作流实例是工作流模型的一个正在运行的实例——在我们的例子中,是要完成的单个订单。
对于每个到达“启动付款”服务任务的工作流实例,Zeebe将创建类型为“启动付款”的作业。负责支付处理的外部工作人员服务——所谓的定时器——将间歇性地轮询Zeebe,询问发起支付类型的任何工作是否可用。
如果某个作业可用于给定的工作流实例,则定时器将**该作业,完成该作业,并通知Zeebe。然后,Zeebe会将该工作流实例推进到工作流的下一步。
接下来,我们将向工作流添加一个消息事件:
- 单击建模器上的“Initiate Payment”任务
- 选择中间有信封的圆形图标
- 双击消息事件并将其标记为“Payment Received”
当工作流引擎需要在工作流实例可以前进之前从外部系统接收消息时,我们在Zeebe中使用消息捕获事件(message catch events)。
在我们建模的场景中,我们使用服务任务启动一个支付,但我们需要等待其他外部系统实际确认收到了支付。此确认以消息的形式出现,该消息将由外部服务异步发送给Zeebe。
Zeebe接收到的消息需要与特定的工作流实例相关联。为了实现这一点,我们还有一些配置要做:
- 选择消息事件并确保您位于屏幕右侧“属性”面板的“常规”选项卡上。
- 在“属性”面板中,单击+图标以创建新消息。现在,您将在建模器中看到两个字段,我们将使用它们将消息关联到特定的工作流实例:消息名称和订阅关联键。
- 让我们给这个消息一个不言而喻的名字:收到的付款(
payment-received
)。
当Zeebe收到消息时,这个名称字段让我们知道消息引用的工作流模型中的哪个消息事件。
但是,我们如何知道消息引用了哪个特定的工作流实例(即,哪个客户订单)?这就是订阅相关**的来源。订阅相关键是工作流实例负载和发送给Zeebe的消息中存在的唯一ID。
我们将使用orderID作为相关键。
继续,将orderID添加到订阅相关键字段中。
当我们创建一个工作流实例时,我们需要确保将orderid作为一个变量,并且在发送消息时,我们还需要提供orderid作为一个相关键。
下面是您在Modeler中应该看到的内容:
接下来,我们将向工作流模型添加一个Exclusive(XOR)网关。Exclusive网关用于根据数据决定工作流实例应遵循的路径。在这种情况下,如果总订单价值大于或等于100美元,我们希望带保险装运项目,并且不带保险装运。
这意味着当我们创建一个工作流实例时,我们需要将订单值作为一个实例变量。但我们稍后再谈。
首先,让我们采取必要的步骤来配置我们的工作流模型来做出这个决定。要添加网关:
- 单击刚才创建的消息事件
- 选择网关(菱形)符号-将新网关添加到模型时,默认使用专用网关。
- 双击网关并添加标签“order value?”
我们将添加两个来自这个 Exclusive网关的传出序列流,它们将导致两个不同的服务任务。每个序列流都将具有一个基于数据的条件,该条件在工作流实例负载的上下文中进行评估。
接下来,我们需要:
- 选择网关并向模型中添加新的服务任务。
- 将任务标记为“无保险装运(Ship Without Insurance)”
- 将类型设置为不带保险的装运(ship-without-insurance)
每当我们使用独占(Exclusive)网关时,我们都要确保设置默认流,在这种情况下,将在不保险的情况下进行装运:
- 选择您刚从网关创建的序列流到“无保险船舶”服务任务
- 点击扳手图标
- 选择“默认流”
现在,我们准备从网关添加第二个传出序列流和服务任务:
- 再次选择网关
- 向模型中添加其他服务任务
- 贴上“带保险装运”的标签。
- 设置要随保险一起装运的类型
接下来,我们将在导致此“带保险的船舶”服务任务的序列流中设置一个条件表达式:
- 单击序列流并打开属性面板
- 在“属性”面板的“条件表达式”字段中输入ordervalue>=100
- 双击序列流添加标签“>100美元”
我们快结束了!总结一下,我们会:
- 选择“无保险船舶”任务
- 向模型添加另一个专用网关,以再次将分支合并在一起(类似于此模型中的BPMN最佳实践)。
- 选择“带保险的船舶”任务
- 添加一个连接到您刚刚创建的第二个独占网关(Exclusive)的传出序列流
我们需要添加的唯一bpmn元素是结束事件:
- 单击第二个独占网关
- 添加结束事件
- 双击它,将其标记为“订单已完成”
最后,我们将把流程ID更改为比您在建模器中看到的默认流程“1”更具描述性的内容:
- 单击画布的空白部分
- 打开“属性”面板
- 将ID更改为订单流程
在最后几次更新之后,您应该在Modeler中看到以下内容:
这就是我们的建模步骤。请记住再次保存该文件,以准备将工作流部署到Zeebe、创建工作流实例并完成它们。
zeebe qq交流群群号:856546010