您如何使工作流引擎来执行特定任务?(上)

您如何使工作流引擎来执行特定任务?(上)

如果您阅读本系列的第一篇文章,我也许已经能够说服您可执行流程?在本系列文章的第二篇博客中,我想更进一步,并通过Restzeebe向您展示 工作流引擎如何在流程中执行具体任务。我所有的示例都使用 Camunda Cloud。我不知道任何其他解决方案可以在云中的BPMN中执行工作流模型。

但是现在到了真相。 您如何使工作流程执行特定任务? 我不想去考虑太多的细节,但Camunda云的工作原理是这样的:  Zeebe,底层引擎,用来工人PubSub的系统。工作人员本质上是执行您的特定代码的软件。工人向引擎注册并等待分配任务。

工人本身可以用任何编程语言实现,对于Java,NodeJS 或 Go之类的 语言, 已经有可以简化集成的库。

 

我的第一篇文章中的诺言仍然有效: 您也不必为此练习编写任何代码。 再次登录到 Restzeebe,然后导航到“工人”部分。在那里,您将找到三个示例,这些示例在后台临时运行一个工作器,连接到您的集群并等待工作。

 

随机数

在第一个示例中,工作程序确定一个随机数,然后将此数字返回给启动的实例。此数字被写入流程上下文,并在以下网关中被检查以查看它是否大于五。每个示例都包含三个可以触发的动作:

 

  1. deploy:将BPMN图部署到您的集群。
  2. start:启动BPMN图的新实例。
  3. 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图的服务任务的属性中配置任务类型:

 

网关也是如此。在这种情况下,我们希望将条件附加到流程上下文中的变量上,该变量由工作人员设置。网关的两个传出路径配置如下:

 

相关教程