zeebe入门课程19-Java使用1

设置zeebe Java客户端

必备环境

  • Java 8

Maven项目中的用法

若要使用Java客户端库,请在项目中声明以下Maven依赖项:

<dependency>
  <groupId>io.zeebe</groupId>
  <artifactId>zeebe-client-java</artifactId>
  <version>${zeebe.version}</version>
</dependency>

客户端的版本应始终与代理的版本匹配。

启动

在Java代码中,实例化客户端如下:

ZeebeClient client = ZeebeClient.newClientBuilder()
  .brokerContactPoint("127.0.0.1:26500")
  .build();

Get Started with the Java client

在本教程中,您将学习如何在Java应用程序中使用Java客户端与Zeebe进行交互。

将指导您完成以下步骤:

先决条件

在开始设置项目之前,请启动broker,即通过在分发中运行启动脚本bin/broker或bin/broker.bat。默认情况下,代理绑定到地址localhost:26500。

Set up a project

首先,我们需要一个Maven项目。使用您的IDE创建一个新项目,或者运行maven命令:

mvn archetype:generate
    -DgroupId=io.zeebe
    -DartifactId=zeebe-get-started-java-client
    -DarchetypeArtifactId=maven-archetype-quickstart
    -DinteractiveMode=false

将Zeebe客户端库作为依赖项添加到项目的pom.xml中:

<dependency>
  <groupId>io.zeebe</groupId>
  <artifactId>zeebe-client-java</artifactId>
  <version>${zeebe.version}</version>
</dependency>

创建一个主类并添加以下行以引导启动Zeebe客户机:

package io.zeebe;

import java.util.Properties;
import io.zeebe.client.ClientProperties;
import io.zeebe.client.ZeebeClient;

public class Application
{
    public static void main(String[] args)
    {
        final ZeebeClient client = ZeebeClient.newClientBuilder()
            // change the contact point if needed
            .brokerContactPoint("127.0.0.1:26500")
            .build();

        System.out.println("Connected.");

        // ...

        client.close();
        System.out.println("Closed.");
    }
}

运行程序。如果您使用一个IDE,您可以只执行主类。否则,您必须用maven构建一个可执行JAR文件并执行它。

您应该看到输出:

Connected.

Closed.

Model a workflow

现在,我们需要一个可以部署的第一个工作流。稍后,我们将使用更多功能扩展工作流。

打开Zeebe Modeler并创建新的BPMN图。将开始事件和结束事件添加到关系图中并连接这些事件。

model-workflow-step-1

设置ID(即bpmn流程ID)并将图表标记为可执行。将图表保存在项目的源文件夹中。

Deploy a workflow

接下来,我们要将建模的工作流部署到broker。broker将工作流存储在其bpmn流程ID下,并分配一个版本(即修订版)。

将以下deploy命令添加到主类:

package io.zeebe;

import io.zeebe.client.api.events.DeploymentEvent;

public class Application
{
    public static void main(String[] args)
    {
        // after the client is connected

        final DeploymentEvent deployment = client.newDeployCommand()
            .addResourceFromClasspath("order-process.bpmn")
            .send()
            .join();

        final int version = deployment.getWorkflows().get(0).getVersion();
        System.out.println("Workflow deployed. Version: " + version);

        // ...
    }
}

运行程序并验证工作流是否已成功部署。您应该看到输出:

Workflow deployed. Version: 1

Create a workflow instance

最后,我们准备创建已部署工作流的第一个实例。工作流实例是由特定版本的工作流创建的,可以在创建时进行设置。

将以下创建命令添加到主类:

package io.zeebe;

import io.zeebe.client.api.events.WorkflowInstanceEvent;

public class Application
{
    public static void main(String[] args)
    {
        // after the workflow is deployed

        final WorkflowInstanceEvent wfInstance = client.newCreateInstanceCommand()
            .bpmnProcessId("order-process")
            .latestVersion()
            .send()
            .join();

        final long workflowInstanceKey = wfInstance.getWorkflowInstanceKey();

        System.out.println("Workflow instance created. Key: " + workflowInstanceKey);

        // ...
    }
}

运行程序并验证是否创建了工作流实例。您应该看到输出:

Workflow instance created. Key: 6

你做到了!要查看工作流实例的执行方式吗?

使用java -jar zeebe-simple-monitor-app-*.jar启动ZEEBE监视器。

打开Web浏览器并转到http://localhost:8080/。

在这里,您可以看到工作流实例的当前状态。

zeebe-monitor-step-1

Work on a job

现在我们想在您的工作流程中做一些工作。首先,在BPMN图中添加一些服务作业,并设置所需的属性。然后扩展您的主类并创建一个作业定时器来处理在工作流实例到达服务任务时创建的作业。

在Zeebe Modeler中打开BPMN图。在开始和结束事件之间插入一些服务任务。

model-workflow-step-2

您需要设置每个任务的类型,它标识要执行的工作的性质。将第一个任务的类型设置为“支付服务”。

保存BPMN图并切换回主类。

添加以下行以为第一个作业类型创建作业定时器:

package io.zeebe;

import io.zeebe.client.api.subscription.JobWorker;

public class Application
{
    public static void main(String[] args)
    {
        // after the workflow instance is created

        final JobWorker jobWorker = client.newWorker()
            .jobType("payment-service")
            .handler((jobClient, job) ->
            {
                System.out.println("Collect money");

                // ...

                jobClient.newCompleteCommand(job.getKey())
                    .send()
                    .join();
            })
            .open();

        // waiting for the jobs

        jobWorker.close();

        // ...
    }
}

运行程序并验证作业是否已处理。您应该看到输出:

Collect money

当您查看Zeebe监视器时,可以看到工作流实例从第一个服务任务移动到下一个服务任务:

zeebe-monitor-step-2

Work with data

通常,工作流不仅仅是任务,还有数据流。工作者从工作流实例获取数据以完成其工作,并将结果发送回工作流实例。

在Zeebe中,数据以变量的形式存储为键值对。创建工作流实例时可以设置变量。在工作流中,工作人员可以读取和修改变量。

在我们的示例中,我们希望使用以下变量创建工作流实例:

"orderId": 31243
"orderItems": [435, 182, 376]

第一个任务应该读取orderid作为输入,并返回totalprice作为结果。

修改工作流实例创建命令并将数据作为变量传递。另外,修改作业定时器以读取作业变量并完成作业并得到结果。

package io.zeebe;

public class Application
{
    public static void main(String[] args)
    {
        // after the workflow is deployed

        final Map<String, Object> data = new HashMap<>();
        data.put("orderId", 31243);
        data.put("orderItems", Arrays.asList(435, 182, 376));

        final WorkflowInstanceEvent wfInstance = client.newCreateInstanceCommand()
            .bpmnProcessId("order-process")
            .latestVersion()
            .variables(data)
            .send()
            .join();

        // ...

        final JobWorker jobWorker = client.newWorker()
            .jobType("payment-service")
            .handler((jobClient, job) ->
            {
                final Map<String, Object> variables = job.getVariablesAsMap();

                System.out.println("Process order: " + variables.get("orderId"));
                System.out.println("Collect money");

                // ...

                final Map<String, Object> result = new HashMap<>();
                result.put("totalPrice", 46.50);

                jobClient.newCompleteCommand(job.getKey())
                    .variables(result)
                    .send()
                    .join();
            })
            .fetchVariables("orderId")
            .open();

        // ...
    }
}

运行程序并验证是否读取了变量。您应该看到输出:

Process order: 31243
Collect money

当我们查看Zeebe监视器时,可以看到变量totalprice已设置:

zeebe-monitor-step-3

zeebe qq交流群群号:856546010

 

 

 

 

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用介绍了一个名为zeebe-bpmn的模块,它将BPMN 2.0的命名空间扩展定义为描述符,并与Zeebe BPMN 2.0扩展一起使用。该模块可以通过引入bpmn-moddle和zeebe-bpmn-moddle来使用。提供了一个XML表示示例,展示了如何在BPMN中使用独占网关(exclusive gateway)来定义条件流程。如果没有满足任何条件,将采用没有条件的默认流。如果网关没有默认流,则会停止执行并创建事件。补充说明了独占网关在工作流实例中的作用,它会选择满足条件的第一个序列流进行继续。每个序列流都有一个条件,在当前工作流实例的上下文中进行计算。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [zeebe-bpmn-moddle:BPMN 2.0的Zeebe模块扩展](https://download.csdn.net/download/weixin_42160252/18252863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [zeebe入门课程10-bpmn元素的支持7(exclusive gateway )](https://blog.csdn.net/qq_30739519/article/details/89530348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值