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 ...
随机推荐
- ubuntu上vritualbox为系统分配硬盘空间
VBoxManage是virtualbox 在ubuntu上提供的管理virtualbox的命令行命令 VBoxManage modifyhd windowsDevEnv --resize VBoxM ...
- springboot Transactional事务的使用
直接上代码: import javax.transaction.Transactional; @Transactional(rollbackOn = { Exception.class }) publ ...
- php判断访问协议是否是https
可以通过$_SERVER中获取是否是HTTPS协议. 在$_SERVER["SERVER_PROTOCOL"]中拿到的只能是http.$_SERVER['HTTPS'] === ...
- 跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境
1. 容器化 Docker 的横空出世,给了容器技术带来了质的飞跃,Docker 标准化了服务的基础设施,统一了应用的打包分发,部署以及操作系统相关类库等,解决了测试生产部署时环境差异的问题.对于运维 ...
- linux语句速查
一.netstat -a或--all:显示所有连线中的Socket -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址 -c或--continuous:持续列出 ...
- mysql 5.5之参数详解
[mysql]default-character-set=utf8 [mysqld] datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock # ...
- UVM——寄存器模型相关的一些函数
0. 引言 在UVM支持的寄存器操作中,有get.update.mirror.write等等一些方法,在这里整理一下他们的用法. 寄存器模型中的寄存器值应该与DUT保持同步,但是由于DUT的值是实时更 ...
- 制作mysql大数据表验证覆盖索引
昨天跟同事聊起数据表性能的问题,能不能仅用覆盖索引实现数据的汇总统计.找了一个开发环境已有的数据表进行测试,通过explain命令,能看到mysql通过覆盖索引就能实现sum的需求,而无须去读取实际行 ...
- 实战SpringCloud响应式微服务系列教程(第六章)
本章节介绍:Flux和Mono操作符 和其他主流的响应式编程一样,Reactor框架的设计目标也是为了简化相应式流的使用方法.为此Reactor框架提供了大量操作符用于操作Flux和Mono对象. 本 ...
- 转载:Docker入门只需看这一篇就够了
最近项目中需要用到 Docker 打包,于是上网查找资料学习了 Docker 的基本命令,记录一下自己遇到的一些错误. 准备开始自己写,结果看到了阮一峰老师的文章,瞬间就没有写下去的动力了,转载大佬的 ...