工作流引擎技术介绍-Flowable例子(四)

2,717 阅读3分钟

在 Flowable 6.5.0 中添加了一个新引擎:Flowable 事件注册表。这支持从任何来源接收和发送事件,并为 JMS、Kafka 和 RabbitMQ 提供开箱即用的支持。此外,可以通过 HTTP 接收事件。看完本篇,你就能知道Flowable工作流中集成消息队列并实践应用是很简单的事情。(本篇介绍使用ActiveMq以及kafka,对于RabbitMQ 官方就推荐任务调度器使用,以后技术细节再细讲集成)

图片

先看看流程结合消息队列的基本配置及使用

环境:

1.安装ActiveMq

1.docker search activemq
2.docker pull webcenter/activemq
3.docker run --name activemq -p 61616:61616 -p 8161:8161 -d webcenter/activemq
4.docker container update --restart=always 容器id //设置容器随docker启动
ActiveMQ安装启动好,访问http://ip:8161/admin,登录名和密码都是admin(在配置文件中可修改)

2.程序配置

图片

流程设计:

图片

1.启动节点配置接收到ActiveMq队列消息则启动一个实例

图片

其中包括事件键和名称、通道键与名称,重要的参数就是队列的key,以及消息内容如何映射到流程变量。在此示例中,将在名为testQueue的 JMS 队列上接收事件。

参数映射: (客户编号、产品名称)

图片

2.当流程实例以myEvent事件消息启动时,第一个等待状态是用户任务,附加了一个中断边界消息事件。

图片

边界消息事件配置类似前面的消息启动事件。不过多了一个相关参数,相关参数是用来过滤消息的,匹配上的消息才能被本流程实例识别。

图片

参数映射: (客户名称)

图片

相关参数:(这里取启动时参数CustomerId)\

图片

3.边界任务没啥特殊的

4.发送消息任务

发送任务节点会有两个事件

  • 一个从流程发送信息到消息队列

图片

发送消息到消息队列,则是需要将流程变量映射消息参数,这里我们只取客户名称。

图片

  • 一个从消息队列接收消息触发

图片

消息参数映射流程变量 (产品、金额)

图片

5.最后一个任务,我们挂载一个表单,对从消息队列取到的数据进行展示

图片

图片

演示运行过程:

1.当我们发布设计好的流程应用,首页应用墙会出现我们设计的应用

图片

同时,事件订阅已经生效,在ActiveMq管理端能看到队列及消费者。(当然,我们看到边界和触发队列及消费者依然在,说明一旦启动订阅,链接应该是一直存在的)

图片

图片

2.向ActiveMq消息队列testQueue中插入一条数据\

消息内容:

{   
"customerId": "2",   
"productNumber": "土豆仙"
}

图片

3.发送成功后,我们可以看到流程已经创建了一条实例,并停留在第一个任务上。

图片

也可以查询对应实例的参数,可以发现参数也正确的从消息队列传到了流程变量

图片

4.继续往边界队列里插入一条数据

消息内容:

{  
"customerId": "2",   
"customerName": "土豆仙"
}

流程触发中断边界消息,走到边界任务

图片

5.审核通过边界任务,我们会发现,流程往消息队列发送了一条数据,并停留在发送消息任务节点。

图片

图片

6.继续往triggerQueue插入一条数据

数据内容:

{   
"customerId": "2",   
"productName": "土豆仙产品",   
"amount": 100
}

图片\

7.流程接收到消息队列的消息,流程继续往下走到最后一个任务

图片

同时最后一个任务也以表单的形式将多次消息队列获取到的数据展示了出来

图片

至此,我们基本完成了集成消息队列,并使用Flowable与消息队列交互的过程。后面,我们会看看更复杂的例子。

微信公众号搜索 土豆仙 关注更多即时技术文章,整理原创不易,转载请标明出处。