原创

Zeebe Docs翻译:3.4 创建并完成工作流实例

温馨提示:
本文最后更新于 2019年10月09日,已超过 1,870 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

我们将为本教程创建2个工作流实例:一个订单值小于$ 100的实例和一个订单值大于或等于$ 100的实例,以便我们可以看到XOR网关正在运行。

返回到“终端”窗口,在该窗口中部署了工作流模型并执行以下命令。

注意:想要使用cmd或Powershell执行此命令的Windows用户必须以不同的方式对变量进行转义。

  • 命令: "{\"orderId\": 1234}"
  • 电源外壳: '{"\"orderId"\": 1234}'

的Linux

./bin/zbctl --insecure create instance order-process --variables '{"orderId": "1234", "orderValue":99}'

苹果电脑

./bin/zbctl.darwin --insecure create instance order-process --variables '{"orderId": "1234", "orderValue":99}'

Windows(Powershell)

./bin/zbctl.exe --insecure create instance order-process --variables '{\"orderId\": \"1234\", \ "orderValue\":99}'

您会看到如下响应:

{ "workflowKey": 1, "bpmnProcessId": "order-process", "version": 1, "workflowInstanceKey": 8 }

我们刚刚创建的第一个工作流实例代表一个具有orderId 1234和orderValue 99(或$ 99)的客户订单。

在同一“终端”窗口中,运行以下命令:

的Linux

./bin/zbctl --insecure create instance order-process --variables '{"orderId": "2345", "orderValue":100}'

苹果电脑

./bin/zbctl.darwin --insecure create instance order-process --variables '{"orderId": "2345", "orderValue":100}'

Windows(Powershell)

./bin/zbctl.exe --insecure create instance order-process --variables '{\"orderId\": \"2345\", \ "orderValue\":100}'

我们刚刚创建的第二个工作流实例代表一个具有orderId 2345和orderValue 100(或$ 100)的客户订单。

如果返回到Operate UI并刷新页面,现在应该看到两个工作流实例(绿色徽章)正在等待“启动付款”任务。

操作中的工作流程实例

请注意,在我们创建一个工作人员来完成initiate-payment工作之前,工作流实例不能移过第一个任务这就是我们接下来要做的。

再说一遍:在真实的用例中,您可能不会使用Zeebe CLI手动创建工作流实例。相反,将响应某些业务事件(例如在客户下订单后发送给Zeebe的消息)以编程方式创建工作流实例。例如,如果许多客户由于销售而同时下订单,则可能会大规模创建实例。为了简单起见,我们在这里使用CLI。

当前,我们有两个实例正在等待“初始付款”任务,这意味着Zeebe创建了两个具有type的任务initiate-payment

zbctl提供了使用外部命令或脚本来生成简单作业工作者的命令。作业工作者将在stdin上以JSON对象的形式接收每个作业的有效负载,并且如果作业处理成功,还必须在stdout上将其结果作为JSON对象返回。

在此示例中,我们还将使用unix命令cat,该命令仅输出它在stdin上接收的内容。

打开一个新的“终端”选项卡或窗口,切换到Zeebe代理目录,然后使用以下命令创建将在该initiate-payment作业工作的作业工人

注意:对于Windows用户,此命令不适用于cmd,因为该cat 命令不存在。我们建议使用Powershell或类似bash的shell来执行此命令。

的Linux

./bin/zbctl --insecure create worker initiate-payment --handler cat

苹果电脑

./bin/zbctl.darwin --insecure create worker initiate-payment --handler cat

视窗

./bin/zbctl.exe --insecure create worker initiate-payment --handler "findstr .*"

您应该看到以下响应:

Activated job 12 with payload {"orderId":"2345","orderValue":100} Activated job 7 with payload {"orderId":"1234","orderValue":99} Handler completed job 12 with payload {"orderId":"2345","orderValue":100} Handler completed job 7 with payload {"orderId":"1234","orderValue":99}

我们可以看到,已激活该作业工人,然后完成了两个可用initiate-payment作业。您可以根据需要关闭该工作人员-在本教程的其余部分中将不需要它。

现在转到运行Operate的浏览器标签。您应该看到工作流实例已经进入中间消息捕获事件,并且在那里等待。

等待消息事件

工作流实例将在中间消息捕获事件上等待,直到Zeebe收到一条消息并将其与实例相关联。可以使用Zeebe客户端发布消息,并且Zeebe还可以连接到消息队列(例如Apache Kafka)并将在此发布的消息与工作流实例相关联。

zbctl还支持消息发布,因此我们将继续在演示中使用它。以下是我们用于发布和关联消息的命令。您将看到我们提供了在Zeebe Modeler中分配给此消息事件的消息“名称”,以及在创建实例的有效负载中所包含的orderId。

请记住,这orderId是我们在配置消息事件时在Modeler中设置的关联密钥。Zeebe要求这两个字段都能够将消息与工作流实例相关联。因为我们有两个带有两个不同的工作流实例orderId,所以我们需要发布两条消息。一个接一个地运行以下两个命令:

的Linux

./bin/zbctl --insecure publish message "payment-received" --correlationKey="1234" ./bin/zbctl --insecure publish message "payment-received" --correlationKey="2345"

苹果电脑

./bin/zbctl.darwin --insecure publish message "payment-received" --correlationKey="1234" ./bin/zbctl.darwin --insecure publish message "payment-received" --correlationKey="2345"

视窗

./bin/zbctl.exe --insecure publish message "payment-received" --correlationKey="1234" ./bin/zbctl.exe --insecure publish message "payment-received" --correlationKey="2345"

您不会在“终端”窗口中看到响应,但是如果刷新Operate,您应该看到消息已成功关联,并且一个工作流程实例已升级为“带保险的运送”任务,而另一个工作流程实例已升级为“保险工作”没有保险运送”任务。

等待运送服务任务

好消息是,这种可视化确认了我们的决策逻辑是否按预期进行了工作:orderValue保险费为100美元的工作流实例将附带保险,保险费orderValue为99美元的工作流实例将附带保险。

您可能知道接下来需要做什么。继续并打开“终端”窗口,然后为ship-without-insurance作业类型创建一个作业工人

的Linux

./bin/zbctl --insecure create worker ship-without-insurance --handler cat

苹果电脑

./bin/zbctl.darwin --insecure create worker ship-without-insurance --handler cat

视窗

./bin/zbctl.exe --insecure create worker ship-without-insurance --handler "findstr .*"

您应该看到以下响应:

Activated job 529 with payload {"orderId":"1234","orderValue":99} Handler completed job 529 with payload {"orderId":"1234","orderValue":99}

您现在可以关闭此工作人员。

选中Operate左下方的“完成实例”复选框,刷新页面,瞧!您将看到第一个完成的Zeebe工作流程实例。

第一个工作流程实例完成

因为“带保险的船”任务具有不同的工作类型,所以我们需要创建第二个可以从事这项工作的工人。

的Linux

./bin/zbctl --insecure create worker ship-with-insurance --handler cat

苹果电脑

./bin/zbctl.darwin --insecure create worker ship-with-insurance --handler cat

视窗

./bin/zbctl.exe --insecure create worker ship-with-insurance --handler "findstr .*"

您应该看到以下响应:

Activated job 535 with payload {"orderId":"2345","orderValue":100} Handler completed job 535 with payload {"orderId":"2345","orderValue":100}

您也可以关闭此工作程序。

让我们在Operate中再看一遍,以确认两个工作流实例均已完成。

两个工作流程实例均已完成

万岁!您已完成本教程!恭喜你

在下一个也是最后一部分,我们将为您提供一些资源,我们认为您在继续使用Zeebe时会有所帮助。

下一页:后续步骤和资源>>

<<上一页:部署工作流

正文到此结束
本文目录