当前位置: 首页 > news >正文

标准网站建设的价格公司注册网站有什么好处

标准网站建设的价格,公司注册网站有什么好处,网络维护合同模板,东莞互联网推广目录 定义图形标记XML内容Flowable与Camel集成使用示例设计Came路由代码 定义 Camel 任务不是 BPMN 2.0 规范定义的官方任务#xff0c;在 Flowable 中#xff0c;Camel 任务是作为一种特殊的服务 任务来实现的。主要做路由工作的。 图形标记 由于 Camel 任务不是 BPMN 2.… 目录 定义图形标记XML内容Flowable与Camel集成使用示例设计Came路由代码 定义 Camel 任务不是 BPMN 2.0 规范定义的官方任务在 Flowable 中Camel 任务是作为一种特殊的服务 任务来实现的。主要做路由工作的。 图形标记 由于 Camel 任务不是 BPMN 2.0 规范的“官方”任务因此没有提供其专用图标。在 bpmnjs 中 Camel 任务我们就使用服务任务代替如图所示 XML内容 Camel 任务在 Flowable 中定义为一个专用的服务任务这个服务任务的 type 属性设置为 camel。 Camel 任务的 XML 表示格式如下 serviceTask idcamelTask1 nameCamel flowable:typecamel /以上在流程定义的服务任务上定义 Camel 类型即可集成逻辑都将通过 Camel 容器委托。 Flowable与Camel集成 本节将具体介绍 Flowable 与 Camel 集成的过程以及 Flowable 基于 Camel 扩展出来的各种特性 和用法。 Camel 的配置与依赖 默认情况下使用 Camel 任务时Flowable 引擎在 Spring 容器中查找 camelContext Bean。camelContext Bean 用于定义 Camel 容器装载的 Camel 路由Camel 路由可以在 Spring 配置文件中定义也可以按照指 定的 Java 包装载路由 camelContext idcamelContext xmlnshttp://camel.apache.org/schema/springpackageScanpackagecom.dragon.test.bpmn.camel.route/package/packageScan/camelContext通过以上配置在初始化时 CamelContext 时会把 com.dragon.test.bpmn.camel.route 中 的路由定义类继承自 RouteBuilder后文会讲解注册到 CamelContext 对象中。CamelContext 是 Camel 中一个很重要的概念它横跨了 Camel 服务的整个生命周期并且为 Camel 服务的工作环境提供支撑 Camel 中的各个 Service 的关联衔接通过 CamelContext 上下文对象完成。 由于 Flowable 的配置文件采用的是 spring bean 配置文件格式因此在 Flowable 与 Camel 集成时以上 配置内容可以直接加在 Flowable 的配置文件中。 如果想要定义多个 camelContext或想使用不同的 Bean 名字可以在 Camel 任务定义中通过以下方 式指定 serviceTask idcamelTask1 nameCamel flowable:typecamel /需要注意的是如果要使用 Camel 任务需要在项目中包含 flowable-camel 模块依赖及 Camel 相关依 赖Maven 依赖定义如下 dependencygroupIdorg.flowable/groupIdartifactIdflowable-camel/artifactIdversionxxx/version/dependencydependencygroupIdorg.apache.camel/groupIdartifactIdcamel-http/artifactIdversionxxx/version/dependency定义Camel路由 Camel 最重要的特色之一就是路由路由用于应用中的通信或者应用间通信。Camel 的路由需要通过 我们手动编排的方式在指定的或可变的端点间进行数据的传输、过滤、转换等操作。Camel 路由 易于使用的一个特性是端点 URI通过指定 URI可以确定要使用的组件以及该组件是如何被配置的。 然后可以决定将消息发送到由该 URI 配置的组件或者使用该组件发出消息。 flowable 的 flowable-camel 模块提供了 Camel 与 Flowable 通信的桥梁当流程流转到 Camel 任务后流程 引擎将调用 Camel 执行对应的路由同时可以选择把流程变量传递给路由在路由处理结束后还可以有 选择地把路由得到的结果以流程变量的方式回传给流程实例。 我们可以通过 Java DSL 构建 Camel 路由也可通过 XML 配置这里不做介绍需要继承 org.apache.camel.builder.RouteBuilder 类然后实现其中的 configure 方法。Flowable 与 Camel 集成后一个 典型的路由定义类如下 public class GetIpInfoCamelCallRoute extends RouteBuilder {Overridepublic void configure() {from(flowable:CamelTaskProcessTest:afef07cc915df4771a54048fe871e9c9e?copyVariablesToPropertiestrue).toD(http://ip-api.com/json/${exchange.getProperty(ip)}?langzh-CNbridgeEndpointtrue).process(new ResultProcessor());} }在以上路由定义类的 configure 方法中通过 Java 的 DSL 语言域特定语言描述路由规则from 和 to 是两个关键字Camel 会从 from 声明的起始端点将消息路由至 to 声明的终点。所有的路由都以一 个 from 开始它接受端点 URI 作为参数。flowable-camel 模块定义了“flowable”类型的路由 URI 协议以 上面的配置为例from 端点endpoint的格式包含冒号和问号分隔的几个部分各部分的含义如表 15.3 所示。 flowable-camel 模块提供的 URI 协议 属性描述flowable协议开头指向引擎端点CamelTaskProcessTest流程定义 Keyafef07cc915df4771a54048fe871e9c9e流程定义中 Camel 服务的 idcopyVariablesToPropertiestrue路由 URI 的参数 路由URI配置 我们可以通过在 URI 中附加一些参数使用 Flowable 提供的几种不同的行为从而实现干预 Camel 组件的功能。本节将介绍 URI 中支持的参数包括输入参数和输出参数两类。 3.1. 输入参数 Flowable 提供了三种输入参数可以用于控制将流程变量复制到 Camel 的策略可配置的输入参数如 表所示 参数对应flowable行为类描述copyVariablesToPropertiesorg.flowable.camel.impl.CamelBehaviorDefaultImpl默认配置将 Flowable 的流程变量复制为 Camel 参数在路由中可以通过形如${property.variableName}的表达式获取到参数值。copyCamelBodyToBodyorg.flowable.camel.impl.CamelBehaviorCamelBodyImpl只将名为camelBody的 Flowable 流程变量复制为 Camel 消息体。如果 camelBody 的值是 Map 对象在路由中可以通过形如 b o d y [ v a r i a b l e N a m e ] 的表达式获取到参数值如果 c a m e l B o d y 的值是纯字符可以使用 {body[variableName]}的表达式获取到参数值如果 camelBody 的值是纯字符可以使用 body[variableName]的表达式获取到参数值如果camelBody的值是纯字符可以使用{body}表达式获取。copyVariablesToBodyAsMaporg.flowable.camel.impl.CamelBehaviorBodyAsMapImpl把 Flowable 的所有流程变量复制到一个 Map 对象里作为 Camel 的消息体。在路由中可以通过形如${body[variableName]}的表达式获取到参数值。以如下路由规则为例 from(activiti:CamelTaskProcess:camelTask1?copyVariablesToPropertiestrue).to(log:org.activiti.camel.examples.SimpleCamelCall);这里的配置在 URI 中附加了 copyVariablesToPropertiestrue表示将 Flowable 的流程变量复制成 Camel 参数。 3.2. 输出参数 同样的Flowable 提供了几种输出参数可以用于控制将 Camel 执行结果复制到流程变量的策略可 配置的输出参数如表所示 flowable-camel 模块提供的 URI 协议 参数描述default默认配置。如果 Camel 消息体是一个 Map 对象则在路由执行结束后将其中每一个属性复制为 Flowable 的流程变量否则将整个 Camel 消息体复制到名为camelBody的流程变量。copyVariablesFromProperties将 Camel 参数以相同的名称复制为 Flowable 流程变量。copyVariablesFromHeader将 Camel Header 中的内容以相同的名称复制为 Flowable 流程变量。copyCamelBodyToBodyAsString与 default 相同但如果 Camel 消息体不是 Map 对象则首先将其转换为字符串然后再复制到名为camelBody的流程变量以如下路由规则为例 from(activiti:CamelTaskProcess:camelTask1?copyVariablesFromPropertiestrue).to(log:org.activiti.camel.examples.SimpleCamelCall);这里的配置在 URI 中附加了 copyVariablesFromPropertiestrue表示将 Camel 参数以相同的名称复制 为 Flowable 流程变量中。 4. 异步Camel调用 默认情况下Camel 任务是同步执行的流程执行到 Camel 任务后将处于等待状态直到 Camel 执 行结束并返回结果后才离开 Camel 任务往下继续流转。如果 Camel 任务执行时间比较长或者某些场 景下不需要同步执行则可以使用 Camel 任务的异步功能将 Camel 任务的 async 参数设置为 true 即可 启用这个功能 serviceTask idcamelTask1 name Camel activiti:typecamelactiviti:asynctrue/设置这个参数后Camel 路由会由 Flowable 作业执行器异步启动。 5. 通过Camel启动流程 前面几节介绍了如何整合 Camel 与 Flowable以及两者如何通信都是先启动 Flowable 流程实例然 后在流程实例中启动 Camel 路由。反过来也可以通过 Camel 任务启动或调用流程实例其 Camel 的路 由规则可以这么设计 from(flowable:ParentProcess:camelTaskForStartSubprocess).to(flowable:subProcessCreateByCamel);其中from 声明的起始端点的 URI 分为三个部分flowable协议开头父流程定义 keyCamel 任务 idto 声明的终止端点的 URI 包含两个部分flowable协议开头子流程定义 key。 使用示例 下面我们看一个使用 Camel 任务的示例流程如图所示用于调用外部第三方服务自动化地 获取 IP 信息。流程发起后首先通过 Camel 任务调用外部 Web 服务查询 IP 信息然后通过邮件任务发送 查询结果给申请人 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xbHKxnwk-1690689579641)(…/public/images/service/camel-task.png)] Camel 路由配置整合到 Flowable 的配置文件中内容如下 process idCamelTaskProcessTest name服务-骆驼任务 isExecutabletruestartEvent ida4192d69b9d5a4d1faf42b7c9741d0d48 /sequenceFlow ida0db08b7fe8d74803b11b59179c6e0a57 sourceRefa4192d69b9d5a4d1faf42b7c9741d0d48 targetRefafef07cc915df4771a54048fe871e9c9e /serviceTask idafef07cc915df4771a54048fe871e9c9e name获取Ip信息 flowable:typecamelextensionElementsflowable:formData /flowable:assigneeTypestatic/flowable:assigneeType/extensionElements/serviceTasksequenceFlow idFlow_1ce3l0r sourceRefafef07cc915df4771a54048fe871e9c9e targetRefActivity_1n9nrw6 /serviceTask idActivity_1n9nrw6 name发送邮件 flowable:typemailextensionElementsflowable:field nametoflowable:expressionliuwenjun05101163.com/flowable:expression/flowable:fieldflowable:field namesubjectflowable:stringIP信息查询结果/flowable:string/flowable:fieldflowable:field namehtmlflowable:expressionlt;htmlgt;lt;bodygt;lt;pgt;用户amp;lt;bamp;gt;${userName}amp;lt;/bamp;gt;你好amp;lt;br/amp;gt;lt;/pgt;lt;pgt;你查询的IPamp;lt;bamp;gt;${ip}amp;lt;/bamp;gt;的信息为amp;lt;br/amp;gt;lt;/pgt;lt;pgt;省份${regionName} 城市${city}lt;/pgt;lt;pgt;互联网服务提供商${isp}lt;/pgt;lt;/bodygt;lt;/htmlgt;/flowable:expression/flowable:fieldflowable:field namecharsetflowable:stringutf-8/flowable:string/flowable:field/extensionElements/serviceTaskendEvent idEvent_1l6yldo /sequenceFlow idFlow_1h6rd9m sourceRefActivity_1n9nrw6 targetRefEvent_1l6yldo //process在以上配置中 1、流程引擎配置使用的是 SpringProcessEngineConfiguration这是因为 Flowable Camel集成时 需要通过 SpringProcessEngineConfiguration 获取 camelContext相关细节读者可自行查看源代码。 2、Camel 路 由 是 通 过 Spring 的 环 境 下 扫 描 路 由 配 置 实现的 Spring 会 扫 描 包 路 径 com.dragon.test.bpmn.camel.route下的 Route 类加载到 camelContext 中。 设计Came路由代码 Camel 路由 Route 的代码如下 package com.didichuxing.bpm.demo.chapter15.camel.route; import com.didichuxing.bpm.demo.chapter15.camel.processor.ResultProcessor; import com.didichuxing.bpm.demo.chapter15.camel.processor.TransformProcessor; import org.apache.camel.builder.RouteBuilder; public class GetIpInfoCamelCallRoute extends RouteBuilder { Override public void configure() throws Exception {from(activiti:CamelTaskProcess:camelTask1?copyVariablesToPropertiestrue).toD(http://ip-api.com/json/${property.ip}?langzh-CNbridgeEndpointtrue).process(new ResultProcessor()); } }在以上代码中 ⑴from 声明的起始端点的 URI 中flowable 为协议开头CamelTaskProcess 为流程定义 key camelTask1 为 Camel 任务 id输入参数配置的 copyVariablesToPropertiestrue 表示将 Activiti 的流程 变量复制成 Camel 参数输出参数使用的默认配置。 ⑵终止端点采用 toD 声明它允许通过表达式的方式来动态定义消息的接收节点这里使用了 表达式${property.ip}表示从 Camel 参数中获取 ip 属性的值。 ⑶路由中使用到了自定义 Processor 处理器 ResultProcessor。Processor 处理器是 Camel 中的一 个重要元素它用于接收从控制端点、路由选择条件又或者另一个处理器的 Exchange 中传来的消 息信息并进行处理。我们可以在自定义的 Processor 处理器中做很多事情比如这里使用它来进 行外部服务返回结果数据格式的转换代码如下 import com.alibaba.fastjson.JSON; import org.apache.camel.Exchange; import org.apache.camel.Processor; import java.util.Map; import java.util.stream.Collectors; public class ResultProcessor implements Processor {public void process(Exchange exchange) {// camelString camelCallResult exchange.getIn().getBody(String.class);// camelSystem.out.println(camel camelCallResult);// MapMapString, String camelCallResultMap JSON.parseObject(camelCallResult,Map.class);//MapString, String resultMap camelCallResultMap.entrySet().stream().filter(map - country.equals(map.getKey()) ||regionName.equals(map.getKey())|| city.equals(map.getKey()) ||isp.equals(map.getKey())).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));// Camel Mapexchange.getOut().setBody(resultMap, Map.class);} }在以上代码中首先获取访问外部服务返回的结果是一个 json 字符串然后将其转成 Map 对象接下来对其 key 进行过滤仅保留 country、regionName、city 和 isp 组成一个新的 Map最后 将该 Map 作为 Camel 消息体回传给 Flowable。 视频地址 骆驼任务
http://www.w-s-a.com/news/91688/

相关文章:

  • 深圳网站制作公司排名微网站和微信公共平台的区别
  • 权威的唐山网站建设扁平网站欣赏
  • 网站外链建设工作计划应用公园app免费制作
  • 东莞营销型网站建设全自动建站系统
  • 网络在线培训网站建设方案虚拟主机配置WordPress
  • 建设工程信息查询哪个网站好台州做优化
  • wordpress页面回收站位置台州做网站
  • 邢台市行政区划图seo咨询师招聘
  • 外贸网站建设案例网站建设优化开发公司排名
  • 恩施网站优化郑州有没有厉害的seo
  • 电子商务网站建设与管理期末考试题铜山区建设局网站
  • 怎么做非法彩票网站大兴安岭网站建设公司
  • 网站备案授权书模板海外如何淘宝网站建设
  • 网站开发提供源代码dedecms做网站教程
  • 怎么做国际网站首页erp系统一套大概多少钱
  • 做代理网站用什么软件建设网站的企业多少钱
  • 微企免费做网站360收录提交
  • 网站导航页怎么做wordpress数据库批量替换
  • wordpress站点更换域名自己做wordpress 模版
  • 怎么做虚拟的网站东莞常平邮编是多少
  • 电子商务网站和普通网站的区别正规网站建设多少费用
  • 郴州免费招聘网站前端好还是后端好
  • 织梦网站怎样做子域名20个中国风网站设计欣赏
  • wordpress网站搬简约创意logo图片大全
  • 叙述网站制作的流程石家庄58同城最新招聘信息
  • 南昌微信网站建设东莞网站优化软件
  • 爱站数据官网纯静态网站挂马
  • 网站建设公司未来方向3d设计网站
  • 建设部网站 干部学院 一级注册建筑师培训 2014年做网站开发的提成多少钱
  • 网上请人做软件的网站铝合金型材外发加工网