原创

Zeebe Docs翻译:3.2 在Zeebe Modeler中创建工作流

BPMN的新手,是否想在继续学习之前了解更多信息?这篇博客文章有助于解释该标准以及为什么它非常适合微服务编排。

如果您已经熟悉BPMN以及如何在Zeebe Modeler中创建BPMN模型,则可以在此处的教程中找到我们在教程中创建的完成的模型:Zeebe入门教程工作流模型

如果您使用的是我们提供的完成模型,而不是构建自己的模型,则还可以继续进行第3.3节:部署工作流

Zeebe Modeler是一个桌面建模工具,可让您使用BPMN 2.0构建和配置工作流模型。在本节中,我们将创建一个工作流模型并将其准备好部署到Zeebe。

我们将创建一个电子商务订单流程作为示例,并为包含以下内容的工作流建模:

  • 发起订单付款
  • 从外部系统接收付款确认消息
  • 根据订单价值,是否带保险运输订单中的物品

完成后,您的工作流程模型将如下所示:

入门工作流程模型

付款任务和运输任务由工作人员服务执行,我们将连接到工作流引擎。“已收到付款”消息将由外部系统发布给Zeebe,然后Zeebe将其与工作流实例相关联。

开始

  • 打开Zeebe Modeler并创建一个新的BPMN图。
  • 将模型另存为order-process.bpmn刚下载的Zeebe代理目录的顶层。提醒一下,此目录称为zeebe-broker-0.17.0

模型中的第一个元素是开始事件,当您打开Modeler时,该事件应该已经在画布上了。

在模型中标记所有元素是BPMN的最佳做法,因此:

  • 双击开始事件
  • 将其标记为“已下订单”以表示只要客户下订单,我们的流程就会启动

接下来,我们需要添加一个服务任务:

  • 单击开始事件,然后选择服务任务图标
  • 将服务任务标记为“开始付款”

接下来,我们将配置“启动付款”服务任务,以便外部微服务可以在其上工作:

  • 点击“开始付款”任务
  • 如果尚不可见,请展开屏幕右侧的“属性”面板
  • 在“ 属性”面板的“ 类型”字段中,输入initiate-payment

这就是您现在应该在Modeler中看到的内容。

启动付款服务任务

类型字段表示Zeebe中作业类型这时需要理解的几个概念:

  • 一个工作仅仅是在需要完成前一个工作流实例可以进行下一步的工作流工作项。请参阅:工作人员
  • 一个工作流实例是一个运行的工作流模型的实例-在我们的例子中,一个人才能得到满足。请参阅:工作流

对于到达“启动付款”服务任务的每个工作流实例,Zeebe将创建一个类型为的工作initiate-payment负责付款处理的外部工作人员服务(即所谓的工作人员)将间歇地轮询Zeebe,以询问是否有任何类型initiate-payment的工作可用。

如果作业可用于给定的工作流程实例,则工作人员将激活该作业,完成该作业,然后通知Zeebe。然后,Zeebe将该工作流程实例推进到工作流程的下一步。

接下来,我们将Message Event添加到工作流中:

  • 单击建模器上的“启动付款”任务
  • 选择圆形图标,中间有一个信封
  • 双击消息事件并将其标记为“已收付款”

讯息事件

当工作流引擎需要在工作流实例可以前进之前从外部系统接收消息时,我们在Zeebe中使用消息捕获事件。请参阅:消息事件

在我们正在建模的场景中,我们使用服务任务启动付款,但是我们需要等待其他外部系统实际确认已收到付款。该确认以消息的形式出现,该消息将由外部服务异步发送到Zeebe。

Zeebe收到的消息需要与特定的工作流实例相关联。为了实现这一点,我们需要做更多的配置:

  • 选择消息事件,并确保您位于屏幕右侧“属性”面板的“常规”选项卡上
  • 在“属性”面板中,单击+图标以创建新消息。现在,您将在Modeler中看到两个字段,用于将消息与特定的工作流程实例相关联:消息名称和订阅相关密钥。
  • 让我们给此消息起一个不言自明的名称:payment-received

添加消息名称

Zeebe收到消息时,此名称字段使我们知道消息所引用的工作流模型中哪个消息事件

但是我们如何知道一条消息指的是哪个特定的工作流程实例(即哪个客户订单)?这就是订阅相关密钥的来源。订阅相关密钥是工作流实例有效负载和发送给Zeebe的消息中都存在的唯一ID。

我们将使用orderId我们的关联密钥。

继续并添加orderId到“订阅相关密钥”字段。

创建工作流实例时,需要确保将其包括orderId为变量,并且orderId在发送消息时还需要提供相关键。

这是您在Modeler中应该看到的内容:

消息关联密钥

接下来,我们将向我们的工作流模型添加一个独占(XOR)网关。专用网关用于对工作流实例应遵循的路径做出基于数据的决策。在这种情况下,如果订单总值大于或等于$ 100 ,我们希望保险的项目发货而没有保险的项目。

这意味着,当我们创建工作流实例时,需要将订单值作为实例变量包括在内。但是我们稍后再讨论。

首先,让我们采取必要的步骤来配置我们的工作流程模型以做出此决定。要添加网关:

  • 单击您刚刚创建的消息事件
  • 选择网关(菱形)符号-将新网关添加到模型时,默认网关是默认网关
  • 双击网关并添加标签“ Order Value?”。这样就很清楚我们在使用什么作为我们的决策标准

将独家网关添加到模型

在模型中标记专有网关

我们将从此互斥网关添加两个传出序列流,这些流将导致两个不同的服务任务。每个序列流都有一个基于数据的条件,该条件在工作流实例有效负载的上下文中进行评估。

接下来,我们需要:

  • 选择网关,然后向模型添加新的服务任务。
  • 将任务标记为“没有保险的船”
  • 将类型设置为 ship-without-insurance

不添加保险服务任务

每当我们使用独占网关时,我们都希望确保设置默认流程,在这种情况下,默认流程将不附带保险:

  • 选择刚从网关到“无保险船”服务任务的序列流
  • 点击扳手图标
  • 选择“默认流”

不添加保险服务任务

现在,我们准备从网关添加第二个传出序列流和服务任务:

  • 再次选择网关
  • 向模型添加另一个服务任务
  • 将其标记为“带保险的船”
  • 将类型设置为 ship-with-insurance

接下来,我们将在导致此“带保险的船”服务任务的序列流中设置条件表达式:

  • 单击序列流程并打开“属性”面板
  • 输入 orderValue >= 100在“条件表达式”字段,在属性面板
  • 双击序列流以添加标签“>$100"

条件表达式

我们快完成了!总结一下,我们将:

  • 选择“没有保险的船”任务
  • 向模型添加另一个Exclusive Gateway,以将分支再次合并在一起(在这样的模型中,这是BPMN的最佳实践)。
  • 选择“带保险的船”任务
  • 添加一个传出序列流,该流连接到您刚创建的第二个互斥网关

我们需要添加的唯一BPMN元素是结束事件:

  • 单击第二个独占网关
  • 添加结束事件
  • 双击以将其标记为“已完成订单”

条件表达式

最后,我们将流程ID更改为比Process_1您在Modeler中看到的默认名称更具描述性的名称

  • 单击到画布的空白部分
  • 打开属性面板
  • 将ID更改为 order-process

这是最近几次更新后在Modeler中应显示的内容:

更新进程ID

这就是我们建模的全部步骤。请记住再保存一次文件,以准备将工作流程部署到Zeebe,创建工作流程实例并完成它们。

下一页:部署工作流>>

<<上一页:教程设置

正文到此结束
本文目录