使用Zeebe编排云事件(下)

使用Zeebe编排云事件(下)

 

云事件映射

BPMN工作流程支持三种模式:

1、EMIT_ONLY,这意味着您要发出一个Cloud Event并继续前进。我们总是可以稍后在工作流中捕获/使用另一个事件,例如:

1-A)  使用BPMN中级捕获事件发送和捕获云事件

bpmn捕获事件发送

 

1-B) 使用BPMN接收任务发送和捕获云事件 。 如下面的示例所示,使用接收任务可以使用边界事件。

bpmn接收任务

 

2、 WAIT_FOR_CLOUD_EVENT 发出并等待BPMN服务任务内的云事件继续

等待bpmn任务继续

 

3、通过发送Cloud Event启动工作流实例

当您想使用BPMN服务任务 来发出云事件时,可以使用第一种方法(EMIT_ONLY)  ,通常将逻辑委托给第三方服务,而无需等待传入事件完成。可以使用BPMN中间捕获事件 或 BPMN接收任务来映射传入事件 。

第二种方法(WAIT_FOR_CLOUD_EVENT)允许您将两个Cloud Events映射到同一 BPMN Service Task。第一个Cloud Event将是发出的事件,第二个Cloud Event将定义何时完成 服务任务。这通常是为了映射对事件做出反应的服务,并在完成处理后发出一个服务。

可以将第三个(启动工作流实例)模式视为云事件与启动工作流实例的动作之间的映射。对于此模式,您将需要映射哪个 Cloud Event 可以触发新工作流实例的创建。

以下示例使用这三种模式来说明如何从BPMN工作流中发出和使用Cloud Events。 您可以在此处找到BPMN模型。

例如,如果我们要发出云事件,则“请求票证队列服务”任务定义以下属性和标头:

 

如您所见,有一个重要的属性和3个标头被定义:

ServiceTask.Type  =“ cloudevents”,它将工作委托给我们的Zeebe Cloud Events Router。

标头模式 = EMIT_ONLY定义了行为,对于此模式,将发出一个Cloud Event

标头类型 =“ Tickets.CustomerQueueJoined”定义将要发出的云事件的类型

标头主机 =“ <IP_ADDRESS>”,这是向其中发送云事件的位置。

重要的是要注意,创建的Cloud Event的数据将包含所有工作流程变量及其当前值。

该示例还显示了如何从同一服务任务发出和使用不同的Cloud Events:

 

对于此模式,服务任务将等待类型为“ Payments.RequestReceived ”的云事件完成。

运行示例

此示例有一个Java Spring Boot实现:https :  //github.com/salaboy/zeebe-cloud-events-examples。有多种方法可以运行此示例(在笔记本电脑,docker,dockercompose,Kubernetes中本地启动所有服务)。我们将研究以下两个选项:

  1. 使用Helm在自己的Kubernetes集群中运行
  2. 使用Camunda Cloud运行

为了运行该示例,您将需要以下组件:

  1. Zeebe
  2. Zeebe云事件路由器
  3. Tickets Service
  4. Payment Service

为了简单起见,该示例仅使用HTTP传输,但可以轻松扩展为使用其他传输,例如WebSockets和Kafka。

使用Helm在自己的Kubernetes集群中运行

因为我们正在构建本机云应用程序,所以我们将这些服务安装在Kubernetes集群中。

Kubernetes集群云架构

 

我们可以利用Helm安装Zeebe集群,包括“操作”到您的Kubernetes集群:

添加zeebe  http://helm.zeebe.io

安装my-zeebe zeebe / zeebe-full

然后,我们可以安装Zeebe Cloud Events Router:

安装路由器–设置env.ZEEBE_CLIENT_BROKER_CONTACTPOINT = my-zeebe-zeebe-gateway:26500 zeebe / zeebe-cloud-events-router

请注意,我们将Zeebe Cloud Events Router指向我们的Zeebe群集网关地址。

最后,我们安装Tickets Service和Payment Service

安装–set env.ZEEBE_CLOUD_EVENTS_ROUTER = http:// zeebe-cloud-events-router

tickets zeebe/tickets-service

helm install –set env.ZEEBE_CLOUD_EVENTS_ROUTER = http:// zeebe-cloud-events-router支付zeebe / payments-service

请注意,这两个服务如何引用Zeebe Cloud Events路由器才能与其进行交互。

为了与Operate,集群中的Zeebe集群和Cloud Events Router进行交互,您可以使用`kubectl port-foward`:

kubectl port-forward svc / my-zeebe-zeebe-gateway 26500:26500

现在,您可以从终端运行例如“ zbctl status –insecure”,以检查Zeebe群集拓扑和状态。

kubectl端口转发svc / zeebe-cloud-events-router 8085:80

现在,您可以在localhost:8085地址中与Zeebe Cloud Events Router进行交互。稍后,您将使用来自终端的curl向这些端点中的一些端点发送HTTP请求。

kubectl port-forward svc / my-zeebe-operate 8081:80

现在,您可以将浏览器指向 http:// localhost:8081 并使用Operate来查看可用的工作流程以及您的环境中有多少次执行。 用户:demo,密码:demo。

 

现在,我们可以部署票务工作流,可以在此存储库中找到它:https :  //github.com/salaboy/zeebe-cloud-events-examples

zbctl deploy tickets.bpmn –insecure

{

  "key": 2251799813685505,

  "workflows": [

    {

      "bpmnProcessId": "TICKETS",

      "version": 1,

      "workflowKey": 2251799813685504,

      "resourceName": "tickets.bpmn"

    }

  ]

}

为了注册一个Cloud Event以启动一个新的工作流实例,您需要将此映射注册到Zeebe Cloud Events Router中,该路由器将Cloud Event与工作流密钥相关联:

>  curl -X POST  http:// localhost:8085 / workflows  -H“内容类型:application / json” -d'{“ cloudEventType”:“ Tickets.Purchase ”,“ bpmnProcessId”:“ TICKETS ”}

现在,您可以通过发出Cloud Event“ Tickets.Purchase ”来启动工作流程,以启动工作流程:

> curl -X POST  http:// localhost:8085 / workflow  -H“内容类型:application / json” -H“ Ce-Id:ABC-123” -H“ Ce-Type:  Tickets.Purchase ” -H“铈来源:curl” -d'{“ sessionId”:“ 1”}'

在“操作”中,您将看到令牌前进,直到工作流程完成。

 

使用Camunda Cloud运行示例

现在,如果您想让生活更轻松,则可以在Camunda Cloud中运行Zeebe,这是Camunda为Zeebe提供的托管服务。在这种情况下,您只需要操作服务,然后自己操作Zeebe Cloud Events Router。

 

在Camunda Cloud(Beta)中注册帐户后,  您可以创建一个自助式Zeebe群集。我创建了一个名为 CloudEvents:

 

使集群启动并运行只花了不到5分钟的时间。如您所见,您还安装了Camunda Operate。

现在,您可以像上一节中一样使用zbctl与新的开发集群进行交互,但是现在可以将凭证导出为环境变量,以允许zbctl与环境变量连接,而不必使用Kubectl port-forward。远程集群。如果在Camunda Cloud Console中向下滚动,则会看到可以复制并粘贴到终端中的导出命令。完成此操作后,您可以使用与之前相同的命令将工作流程定义部署到远程集群:

注意:请记住,您可以在此存储库中找到BPMN模型:https :  //github.com/salaboy/zeebe-cloud-events-examples

> zbctl部署tickets.bpmn

请注意,现在我们正在使用SSL,因此不需要-insecure标志。

要针对Camunda Cloud中的Zeebe集群运行Zeebe Cloud Events路由器,您只需确保Zeebe Cloud Events路由器可以连接到Zeebe集群,并在安装Zeebe Cloud Events路由器时发送以下变量即可:

> helm install router –set env.ZEEBE_CLIENT_BROKER_CONTACTPOINT=7ece08ec-f0df-43e4-ada6-55f46368ef64.zeebe.camunda.io:443 –set env.ZEEBE_CLIENT_ID=KChsFczamyQ604uGlCHployFmcavMo3n –set env.ZEEBE_CLIENT_SECRET=<YOUR SECRET> –set env.ZEEBE_AUTHORIZATION_SERVER_URL=https://login.cloud.camunda.io/oauth/token –set env.ZEEBE_CLIENT_SECURITY_PLAINTEXT=false zeebe/zeebe-cloud-events-router

请注意,您可以从Camunda Cloud Console中获取 <YOUR SECRET>,就像您对终端所做的那样,需要使用此密码才能通过SSL建立连接。

一旦Zeebe Cloud Events Router运行,您就可以像以前一样启动新的工作流实例。

注册云事件以启动新的工作流实例,您可以通过将云事件与工作流密钥相关联,将此映射映射到Zeebe云事件路由器:

> curl -X POST  http:// localhost:8085 / workflows  -H“内容类型:application / json” -d'{“ cloudEventType”:“ Tickets.Purchase ”,“ bpmnProcessId”:“ TICKETS ”}

现在,您可以通过发出Cloud Event“ Tickets.Purchase ”来启动工作流程,以启动工作流程:

> curl -X POST  http:// localhost:8085 / workflow  -H“内容类型:application / json” -H“ Ce-Id:ABC-123” -H“ Ce-Type:  Tickets.Purchase ” -H“铈来源:curl” -d'{“ sessionId”:“ 1”}

请注意,现在,此工作流程的执行将在Camunda Cloud内部进行。这意味着您可以在群集旁边托管的Camunda Operate中监视这些执行:

 

总结

这篇博客文章介绍了如何使用Zeebe Workflow编排云事件的基本示例。您已经了解了如何运行自己的Kubernetes集群中的所有组件,以及如何在Camunda Cloud中使用Zeebe避免在基础架构中安装,运行和维护Zeebe(不用担心!)。

本示例说明如何利用工作流引擎(如Zeebe)和BPMN语言编排Cloud Events来:获得有关服务交互方式,瓶颈所在以及如何识别更改以进行持续改进的可见性和业务可追溯性。

为基于事件的系统提供业务流程层。在编排和编排之间保持适当的平衡是开发可以持续发展的强大系统的关键。

拥有一套强大的机制来处理异常和不愉快的路径,例如超时和业务错误处理。

确保事件遵循自然顺序来实现业务目标,这对于确定流程是否可以改善以及了解新的业务需求非常有用。

还有其他方法可以运行该示例,例如使用Docker Compose甚至在Kubernetes外部和笔记本电脑本地运行服务。

相关教程