Zeebe服务学习5-多实例特性实践
一、背景
在0.21版本之前,Zeebe不支持多实例元素,在2019年10月9号发布的0.21版本中,加入这一特性,
主要是体现在Zeebe Modeler 0.7.0以及之后的版本中。
二、特性介绍
我对这个多实例比较好奇,研究了一下,它最终是解决了什么问题,在官方文档中介绍如下:
A multi-instance activity is executed multiple times - once for each element of a given collection (like a foreach loop in a programming language).
翻译一下:多实例流程会被执行多次——给定的集合中的每个元素都被执行一次(类似编程语言中的foreach循环)
对于这句话,我们可以理解成,你现在有个微服务接口是执行单个操作的,现在有个场景需要对它进行批量的操作,
而且批量执行之后或许需要用到返回值,那么我们可以使用这个特性。
三、Demo 演示
我在本机部署了Zeebe 0.21版本的服务,然后下载了Zeebe Modeler 0.7.0建模工具
1.建模
支持多实例特性就是在服务(支持ServiceTask、ReceiveTask。SubProcess)上加上三道横杠(或者竖着)


流程描述:外部传入参数data,这个参数结构如下:
public class Order
{
public string Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public List<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
public string Id { get; set; }
public string OrderId { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public int Count { get; set; }
}
第一步先根据参数创建主单信息,第二步通过拿到主单Id去批量创建明细单的信息,最后一步是观察一下最终可以拿到什么返回值(观察Zeebe Variables的值)
2.执行代码
public static async Task Main(string[] args)
{
// create zeebe client
_client = ZeebeClient.NewZeebeClient(ZeebeUrl);
// deploy
var deployResponse = await _client.NewDeployCommand().AddResourceFile(DemoProcessPath).Send(); // create workflow instance
var workflowKey = deployResponse.Workflows[0].WorkflowKey; // 发起调用
var workflowInstance = await _client
.NewCreateWorkflowInstanceCommand()
.WorkflowKey(workflowKey)
.Variables(JsonConvert.SerializeObject(WorkflowInstanceVariables))
.Send(); // 模拟JobWorkers监听
Initial();
}
其实结果是失败的,因为我们没有配置多实例的inputCollection,补充上这块的配置

配置完成后,再去执行,结果如下:

这是按照顺序执行的规则来的也就是,C#的foreach使用的方法,顺序执行每个元素。
在Zeebe Variables里面会有一个responses字段(这是我们定义的Output Collection),里面包含着这两次执行后的结果列表。
另外还有一种并行执行的,类似于C#中的Parallel.ForEach(),在此不作赘述。
四、总结
这个特性其实是Zeebe对于微服务接口的扩展,将执行单个的接口扩展成批量接口,执行逻辑上支持顺序执行与并发执行。
参考:
【1】https://docs.zeebe.io/bpmn-workflows/multi-instance/multi-instance.html
Zeebe服务学习5-多实例特性实践的更多相关文章
- Zeebe服务学习2-状态机
1.什么是状态机? 第一次接触到这个名词,感觉自己是明白这个东东是啥的,但是后来发现,emm-,是的,只是理解了这个词而已. 贴一下官方介绍: 有限状态机,(英语:Finite-state machi ...
- Zeebe服务学习1-简单部署与实现demo
1.Zeebe是什么? Camunda公司研发的工作流引擎Zeebe,目标是对微服务的编排.具体详细介绍可以参考官网:https://zeebe.io/what-is-zeebe/ 2.背景 随着微服 ...
- Zeebe服务学习3-Raft算法与集群部署
1.背景Zeebe集群里面保证分布式一致性问题,是通过Raft实现的,其实这个算法用途比较广泛,比如Consul网关,也是通过Raft算法来实现分布式一致性的. 首先简单介绍一下Raft: 在学术界, ...
- 微服务学习笔记——Spring Boot特性
1. 创建独立的Spring应用程序 2. 嵌入的Tomcat,无需部署WAR文件 3. 简化Maven配置 4. 自动配置Spring 5. 提供生产就绪型功能,如指标,健康检查和外部配置 6. 开 ...
- java消息服务学习之JMS高级特性
将介绍的内容是: 控制消息确认.为发送消息指定选项.创建临时目的地.使用JMS本地事务.异步发送消息 五个方面. 1.控制消息确认 在JMS消息得到确认之前,并不认为它已经成功使用.要成功使用消息,通 ...
- .NET Core 微服务学习与实践系列文章目录索引(2019版)
参考网址: https://archy.blog.csdn.net/article/details/103659692 2018年,我开始学习和实践.NET Core,并开始了微服务的学习,以及通过各 ...
- MySQL5.6 GTID新特性实践
MySQL5.6 GTID新特性实践 GTID简介 搭建 实验一:如果slave所需要事务对应的GTID在master上已经被purge了 实验二:忽略purged的部分,强行同步 本文将简单介绍基于 ...
- CSS学习摘要-定位实例
CSS学习摘要-定位实例 注:全文摘自MDN-CSS定位实例 列表消息盒子 我们研究的第一个例子是一个经典的选项卡消息框,你想用一块小区域包括大量信息时,一个非常常用的特征.这包括含有大信息量的应用, ...
- SpringCloud微服务学习笔记
SpringCloud微服务学习笔记 项目地址: https://github.com/taoweidong/Micro-service-learning 单体架构(Monolithic架构) Mon ...
随机推荐
- zookeeper伪集群
Zookeeper运行需要java环境,需要安装jdk,建议本地下载好需要的安装包然后上传到服务器上面,服务器上面下载速度太慢. 上传 [root@192 ~]# java -version java ...
- 62 (OC)* leetCode 力扣 算法
1:两数之和 1:两层for循环 2:链表的方式 视频解析 2:两数相加 两数相加 3. 无重复字符的最长子串 给定一个字符串,请找出其中长度最长且不含有重复字符的子串,计算该子串长度 无重复字符的最 ...
- [Design Patterns] 01. Creational Patterns - Abstract Factory
设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素 ...
- uboot学习之uboot启动流程简述
一.uboot启动分为了三个阶段BL0.BL1.BL2:BL0表示上电后运行ROM中固化的一段程序,其中ROM中的程序是厂家写进去的,所以具体功能可能根据厂家芯片而有所不同.功能如下: 初始化系统时钟 ...
- C#使用Oxyplot绘制监控界面
C#中可选的绘图工具有很多,除了Oxyplot还有DynamicDataDisplay(已经改名为InteractiveDataDisplay)等等.不过由于笔者这里存在一些环境上的特殊要求,.Net ...
- 三段式有限状态机Verilog代码
状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作.完成特定操作的控制中心.有限状态机简写为FSM(Finite State Machine),主 ...
- selenium-03-常用操作
基本介绍: Selenium工具专门为WEB应用程序编写的一个验收测试工具. Selenium的核心:browser bot,是用JavaScript编写的. Selenium工具有4种:Seleni ...
- Kafka系列二之部署与使用
Kafka部署与使用 写在前面 从上一篇Kafka的架构介绍和安装中,可能,你还一直很蒙,kafka到底该怎么使用呢?接下来,我们就来介绍Kafka的部署与使用.上篇文章中我们说到,Kafka的几个重 ...
- opencv之霍夫曼变换
霍夫变换不仅可以找出图片中的直线,也可以找出圆,椭圆,三角形等等,只要你能定义出直线方程,圆形的方程等等. 不得不说,现在网上的各种博客质量真的不行,网上一堆文章,乱TM瞎写,误人子弟.本身自己就没有 ...
- ps 将图片四角变成圆角
1.用PS打开一张图片,用矩形选框工具,选出你要保留的的那一部分,“选择→修改→平滑”.在弹出的选框里添入数值,值越大角就越圆. 2.选择“选择→反选”,再按delete删除就ok了.