Zeebe Docs翻译:3.4 创建并完成工作流实例
我们将为本教程创建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时会有所帮助。
- 本文标签: 其他
- 本文链接: https://www.v8en.com/article/197
- 版权声明: 本文由SIMON原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权