您如何使工作流引擎来执行特定任务?(上)
您如何使工作流引擎来执行特定任务?(上)
如果您阅读本系列的第一篇文章,我也许已经能够说服您可执行流程?在本系列文章的第二篇博客中,我想更进一步,并通过Restzeebe向您展示 工作流引擎如何在流程中执行具体任务。我所有的示例都使用 Camunda Cloud。我不知道任何其他解决方案可以在云中的BPMN中执行工作流模型。
但是现在到了真相。 您如何使工作流程执行特定任务? 我不想去考虑太多的细节,但Camunda云的工作原理是这样的: Zeebe,底层引擎,用来工人PubSub的系统。工作人员本质上是执行您的特定代码的软件。工人向引擎注册并等待分配任务。
工人本身可以用任何编程语言实现,对于Java,NodeJS 或 Go之类的 语言, 已经有可以简化集成的库。
我的第一篇文章中的诺言仍然有效: 您也不必为此练习编写任何代码。 再次登录到 Restzeebe,然后导航到“工人”部分。在那里,您将找到三个示例,这些示例在后台临时运行一个工作器,连接到您的集群并等待工作。
随机数
在第一个示例中,工作程序确定一个随机数,然后将此数字返回给启动的实例。此数字被写入流程上下文,并在以下网关中被检查以查看它是否大于五。每个示例都包含三个可以触发的动作:
- deploy:将BPMN图部署到您的集群。
- start:启动BPMN图的新实例。
- worker:一个工作人员在您的集群中注册了几秒钟并执行代码。
执行前两个步骤,然后切换到Operate。使用Operate,您可以查看所有已部署的BPMN图和已完成/正在运行的实例。因此,在第二步之后,新实例已启动并在node中等待 Random Number。该过程不会继续,因为工作人员必须首先执行相应的任务。如果现在让工作程序运行,您将注意到实例在短时间后继续运行并最终终止。
对于该工作人员,NodeJS实现非常简单:
const { ZBClient } = require("zeebe-node");
function createWorkerRandomNumber() {
// initialize node js client with camunda cloud API client
const zbc = new ZBClient({
camundaCloud: {
clientId: connectionInfo.clientId,
clientSecret: connectionInfo.clientSecret,
clusterId: connectionInfo.clusterId,
},
});
// create a worker with task type 'random-number'
zbc.createWorker({
taskType: "random-number",
taskHandler: async (job: any, complete: any, worker: any) => {
try {
const min =
job.customHeaders.min && job.customHeaders.max
? Number(job.customHeaders.min)
: 0;
const max =
job.customHeaders.min && job.customHeaders.max
? Number(job.customHeaders.max)
: 10;
const randomNumber = Math.floor(Math.random() * (max - min + 1) + min);
complete.success({
randomNumber,
});
} catch (error) {
complete.failure(error);
}
},
});
}
在BPMN图的服务任务的属性中配置任务类型:
网关也是如此。在这种情况下,我们希望将条件附加到流程上下文中的变量上,该变量由工作人员设置。网关的两个传出路径配置如下:
相关教程
- 2021-02-13
- 2021-02-13
- 2021-02-07
- 2021-02-07
- 2021-02-07
- 2021-02-06
- 2021-02-04
- 2021-01-30
- 2021-01-30
- 2021-01-24