Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Flowable实战-Camel使用「建议收藏」

Flowable实战-Camel使用「建议收藏」

作者头像
全栈程序员站长
发布于 2022-08-31 03:13:41
发布于 2022-08-31 03:13:41
2.9K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

本博客将讨论了如何在Flowable 6.4.1中安装和使用Camel。 希望在阅读此博客后,您将能够设置Flowable Task应用程序,以允许用户运行可以通过Camel路由与其他应用程序集成Flowable。 此博客使用Flowable Camel模块中的示例。

Camel

Camel是一个apache项目,它是为了让Java应用程序之间提供标准化的集成平台。 它以组件的形式提供传输(端点 endpoints)和企业集成模式(EIPS)的具体实现,以解决集成问题。 然后使用域特定语言(DSL)来创建将传输和EIP连接在一起的路由。 将文件从/ tmp目录加载到内存中,然后将其内容传递到JMS队列。该实例如下所示。

from (“file:/tmp”).to(“jms:aQueue”)

Flowable提供了一个Camel Task,当实例到达Camel Task时会调用定义的camel路由。 因此,Camel路由负责执行应用程序集成和处理,而Camel Task实际上只是一种连接到Camel路由或从Camel接收信息的机制。

Flowable Camel使用

接下来我要做的事情就是将Camel嵌入到Flowable Task应用程序中。 由于Flowable Task应用程序现在是一个Spring Boot应用程序,我将Camel Spring Starter安装到Flowable Task应用程序中。 我还需要将Flowable Camel模块安装到Flowable Task应用程序中。 Flowable Camel模块为Camel Task提供实现类和配置,以连接到Flowable任务应用程序中。 然后,路由包含与其集成的外部应用程序的端点。 注意:本博客假定您已经在tomcat容器中下载并安装了所有Flowable的应用程序。 下图给出了这种架构的可视化:

安装Camel

  1. 下载并解压 6.4.1程序包
  2. 在我的例子中,进入到到Flowable UI Task App模块(〜/ workspace / flowable-engine-flowable-6.4.1 / modules / flowable-ui-task / flowable-ui-task-app)。 打开pom.xml并将以下内容添加到依赖项部分。 如下所示:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>2.23.0</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-camel</artifactId>
</dependency>

3、从flowable-ui-task-app的根目录使用以下命令构建mvn项目:mvn package install -DskipTests。 我发现我必须跳过测试,因为主应用程序未通过多项测试。

4、构建成功后,Task应用程序将被打包为target / flowable-task.war。 将新war复制到tomcat webapps目录中(例如cp target / flowable-task.war / opt / tomcat / webapps /。)。 从webapps目录中删除现有的任务app目录(/ opt / tomcat $ rm -Rf webapps / flowable-task)并重启tomcat。

5、验证您是否可以访问http:// localhost:8080 / flowable-task上的任务应用程序。

同步方式使用Camel Task

现在您已经设置好了运行所需的环境,您可以开始在工作流程中使用Camel Task。 当在执行实例到达Camel任务时,Camel Task将自动运行并调用camel路由。 运行的路由是通过将camel任务ID与路由器规则的from元素匹配来确定的。 例如route:from(“flowable:asyncPingProcess:serviceAsyncPing”)。to(“seda:continueAsync”); 匹配名为asycnPingProcess的流程,该流程具有id为serviceAsyncPing的camel任务。 此工作流程和任务如下所示:

流程定义如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
<process id="CamelVariableTransmission" name="CamelVariableTransmission" isExecutable="true">
<startEvent id="startEvent1"></startEvent>
<serviceTask id="ping" name="Send Variable" flowable:type="camel"></serviceTask>
<sequenceFlow id="sid-5D4FCE03-981A-4E93-91A1-02ECD6046D41" sourceRef="startEvent1" targetRef="sid-79D5FE99-60CA-424F-AAD3-7ABBA577BCBB"></sequenceFlow>
<sequenceFlow id="sid-F08E2B38-EC21-478A-ACAF-938027455F6D" sourceRef="ping" targetRef="saveOutput"></sequenceFlow>
<serviceTask id="saveOutput" name="Save Variable Output" flowable:class="camel.examples.pingpong.SaveOutput"></serviceTask>
<endEvent id="sid-490A8527-1FAD-4E60-B2CB-F395781A048D"></endEvent>
<sequenceFlow id="sid-D7FEDCBA-C1BE-4FC0-9C4F-CF1642C3D2CF" sourceRef="saveOutput" targetRef="sid-490A8527-1FAD-4E60-B2CB-F395781A048D"></sequenceFlow>
<serviceTask id="sid-79D5FE99-60CA-424F-AAD3-7ABBA577BCBB" name="Initialise Variables" flowable:class="com.shareniu.InitialiseVariables"></serviceTask>
<sequenceFlow id="sid-2B35BD26-8861-45FC-9A19-B83F5D4A72F2" sourceRef="sid-79D5FE99-60CA-424F-AAD3-7ABBA577BCBB" targetRef="ping"></sequenceFlow>
</process></definitions>

默认情况下,当camel运行规则时,camel任务将立即(同步)接收响应,然后流程执行实例转到下一个任务。 响应包括运行时由camel路由设置的任何变量值。

异步方式使用Camel Task

在我们创建的示例中,camel任务被设置为异步。 这意味着camel任务将由异步的Flowable定时器运行,并直接进入接收任务,等待信号。 此方案实现了集成用例,其中camel路由无法立即返回。

例如,如果camel路由正在执行某些外部应用程序处理并需要等待结果,然后让Flowable流程知道它已完成。 在我们的示例中,我们使用了Receive Task,但您也可以使用设置了triggerable标志的Service Task作为返回路由,基本上将触发器发送到流程/任务实例。 from和to端点的完整camel路由如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from("flowable:asyncPingProcess:serviceAsyncPing").to("seda:continueAsync");
from("seda:continueAsync").to("flowable:asyncPingProcess:receiveAsyncPing");

有一件事情要特别注意。如果将camel任务设置为异步,那么如果camel立即响应,则流程实例可能失败。根据我们的分析,这是因为当camel试图响应并找到任务时,接收任务还没有被创建。

设置Camel Route

Camel的一个很好的特点是DSL特性意味着我们可以将CAMEL路由定义为Java类。我们已经将camel-spring-starter设置为Flowable任务应用程序的一部分,因此,我们可以将camel路由定义为与Flowable任务应用程序位于同一类路径中的Spring组件,这些组件将被默认camel上下文作为路由获取。这样做:

将可流动任务应用程序导入Eclipse(即从Eclipse导入MVN项目,从~/workspace/flowable-engine-flowable-6.4.1/modules/flowable-ui-task/flowable-ui-task-app)。

定位到org.flowable.ui.task.application包并创建一个名为AsyncPingRoute的类,该类扩展了RouteBuilder。实现类如下:

Camel变量

我们在工作流中定义了一个服务任务,用于在流程中设置一些变量,这些变量将由camel任务发送到camel路由。任务和实现类如下所示。如您所见,通过设置一个变量(在我们的例子中称为“input”)将变量传入流程实例。然后将每个过程变量传递给camel路由,并可以在路由中访问(例如显示如何在路由中使用“input”变量)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from("flowable:PingPongProcess:ping").transform().simple("${property.input} World");

来自camel路由的返回变量与正在运行的流程实例进行关联,并且在名为“camelbody”的变量中是可用的。

保存变量输出服务任务的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class SaveOutput implements JavaDelegate {

@SuppressWarnings("unchecked")
@Override
public void execute(DelegateExecution execution) {
Map<String, String> outputMap = (Map<String, String>) execution.getVariable("outputMap");
outputMap.put("outputValue", (String) execution.getVariable("camelBody"));
System.out.println("CamelBody: " + (String) execution.getVariable("camelBody"));
}
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143496.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【第十六篇】Flowable事件之结束事件
  结束事件顾名思义就是流程结束的事件,除了前面遇到的空结束事件外,结束事件还包括如下几种:
用户4919348
2022/04/13
2.5K0
【第十六篇】Flowable事件之结束事件
【第十五篇】Flowable事件-信号事件
我们可以把信息的作用域由原来的golbal全局的调整为processInstance,测试后发现还是执行了,说明在启动事件信息的作用域其实是不起作用的。
用户4919348
2022/04/13
2.1K0
【第十五篇】Flowable事件-信号事件
2023最新版本Activiti7系列-多实例详解
多实例活动是为业务流程中的某个步骤定义重复的一种方式。在编程概念中,多实例与 for each 结构相匹配:它允许对给定集合中的每个项目按顺序或并行地执行某个步骤或甚至一个完整的子流程。
用户4919348
2023/08/11
1.2K0
2023最新版本Activiti7系列-多实例详解
【第十四篇】Flowable事件-错误事件
  错误事件可以用做一个流程的开始事件或者作为一个任务或者子流程的边界事件,错误事件没有提供作用中间事件的功能,这一点和前面介绍的定时器事件和消息事件还有区别的。
用户4919348
2022/04/13
1.8K0
【第十四篇】Flowable事件-错误事件
Flowable深入浅出-1 Flowable简介
先来看下百度百科的定义: 由BPMI(The Business Process Management Initiative)开发了一套标准叫业务流程建模符号(BPMN – Business Process Modeling Notation)。在 BPMI Notation Working Group超过2年的努力,于2004年5月对外发布了BPMN 1.0 规范。后BPMI并入到OMG组织,OMG于2011年推出BPMN2.0标准,对BPMN进行了重新定义**(Business Process Model and Notation**)。BPMN的主要目标是提供一些被所有业务用户容易理解的符号,从创建流程轮廓的业务分析到这些流程的实现,直到最终用户的管理监控。BPMN也支持提供一个内部的模型可以生成可执行的BPEL4WS。因此BPMN的出现,弥补了从业务流程设计到流程开发的间隙。 BPMN定义了一个业务流程图(Business Process Diagram),该业务流程图基于一个流程图(flowcharting),该流程图被设计用于创建业务流程操作的图形化模型。而一个业务流程模型(Business Process Model),指一个由图形对象(graphical objects)组成的网状图,图形对象包括活动(activities)和用于定义这些活动执行顺序的流程控制器(flow controls)。 大白话理解: BPMN是一套符号的标准,这些符号描述了如果做一个业务,并且这个业务在做的过程中被人监控和控制。业务人员和开发人员通过这套图形可以很好的完成协作。
全栈程序员站长
2022/08/31
1.1K0
Flowable深入浅出-1 Flowable简介
七、springboot整合flowable(工作流)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143284.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
2.8K0
七、springboot整合flowable(工作流)
流程图绘制
在 IDEA 中,当我们安装了这个插件之后,新建文件的时候,就有相应的选项,如下图:
程序员NEO
2023/10/12
5910
流程图绘制
activiti的简单使用说明
java Doc https://www.activiti.org/javadocs/
用针戳左手中指指头
2021/03/02
2.1K0
activiti的简单使用说明
【第十八篇】Flowable之多人会签
1.在用户任务节点绑定了一个监听器,监听create行为,该监听器我们是通过UEL表达式来实现的,mulitiInstanceTaskListener是我们注入到Spring容器中的对象
用户4919348
2022/04/13
4.6K0
【第十八篇】Flowable之多人会签
Flowable学习笔记(一、入门)
Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据,等等。这个章节将用一个可以在你自己的开发环境中使用的例子,逐步介绍各种概念与API。
三分恶
2020/07/16
5.8K0
flowable流程详解
Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。 在Flowable术语中,我们将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。
全栈程序员站长
2022/08/26
2.3K0
flowable流程详解
Spring Boot + flowable 快速实现工作流
来源:https://blog.csdn.net/duan18888/article/details/124881904 今天分享一个不错的工作流引擎:flowable! 1. flowable-ui部署运行 flowable-6.6.0 运行 官方demo 参考文档: “ https://flowable.com/open-source/docs/bpmn/ch14-Applications/ ” 1、从官网下载flowable-6.6.0 : https://github.com/flowable/fl
程序猿DD
2023/04/04
1.3K0
Spring Boot + flowable 快速实现工作流
最近进行的一次技术选型(工作流引擎)及相关知识介绍
最近有个新项目,需要实现类似工作流引擎的效果,如果不知道是啥,看完本文就懂了。公司内其实也有些自研的,可能就是不像开源的这些那样,还支持这个那个规范,都是基于需求定制开发的,扩展性稍微差点。所以,这次其实几个同事,分工调研了几个开源的和公司内的,开源的包括activiti、flowable、camunda,我这边主要调研了flowable、camunda,同事调研了activiti和公司内部的。
低级知识传播者
2022/03/28
2.2K0
最近进行的一次技术选型(工作流引擎)及相关知识介绍
SpringBoot+flowable快速实现工作流,so easy!
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
3.3K0
【第一篇】Flowable的基本操作
  创建一个基本的maven工程,可以是Eclipse也可以是其他IDEA。然后添加两个依赖
用户4919348
2022/04/13
1.8K0
【第一篇】Flowable的基本操作
请假要组长和经理同时审批该怎么办?来看看工作流中的会签功能!
松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来和松哥一起做一个完成率超 90% 的项目,戳戳戳这里-->TienChin 项目配套视频来啦。 ---- 1. 会签流程图 2. 请假处理 2.1 前端提交请假流程 2.2 服务端处理请假请求 2.3 服务端返回待审批数据 2.4 服务端批准 OR 拒绝 2.5 服务端返回流程数据 2.6 前端渲染审批数据 3. 或签 今天松哥和小伙伴们介绍一下 Spring Security
江南一点雨
2022/09/08
6750
请假要组长和经理同时审批该怎么办?来看看工作流中的会签功能!
Activiti Exploer工作流控制台使用指南!使用Activiti Explorer定义部署执行工作流
Activiti Explorer简介 Activiti Explorer: Activiti控制台,是一个web应用程序 从Activiti的官方网站下载Activiti的压缩zip文件时,Activiti控制台在 ${Activiti_home}/wars文件夹下面 该控制台的目的并不是创建一个完善的web应用程序,仅仅是为客户端用户准备的应用程序.对于该控制台,使用了一个内存数据库,也可以换成自定义的数据库(查看WEB-INF文件夹下面的applicationContext.xml文件) 登录控制
攻城狮Chova
2022/01/22
1.2K0
Activiti Exploer工作流控制台使用指南!使用Activiti Explorer定义部署执行工作流
我也没想到 Springboot + Flowable 开发工作流会这么简单
公司内部的OA系统最近要升级改造,由于人手不够就把我借调过去了,但说真的我还没做过这方面的功能,第一次接触工作流的开发,还是有点好奇是个怎样的流程。
程序员小富
2020/08/28
8670
我也没想到 Springboot + Flowable 开发工作流会这么简单
activiti6环节流程图_activiti流程图
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说activiti6环节流程图_activiti流程图,希望能够帮助大家进步!!!
Java架构师必看
2022/06/13
2.6K0
activiti6环节流程图_activiti流程图
Flowable学习笔记(二、BPMN 2.0-基础 )
业务流程模型和标记法(BPMN, Business Process Model and Notation)是一套图形化表示法,用于以业务流程模型详细说明各种业务流程。
三分恶
2020/07/16
4.7K0
推荐阅读
相关推荐
【第十六篇】Flowable事件之结束事件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验