流程图(flows)

流程图(flows)

Mule官方原文链接

简介

流程图(flow)是一种简洁且非常灵活的机制。Mule可以灵活使用流程图实现复杂的服务架构。通过使用流程图,可以通过在Mule流程图中合理的安排任意数量的元素来实现自动化集成处理或构造Mule消息处理解决方案。开发人员在流程图中自由的实现内容,可以轻松的创建出满足需求的解决方案。

什么时候使用流程图

Flow是Mule中最多样和有效的集成机制

Flow适用于多种场合

  • 简单的集成任务

  • 定期数据处理

  • 连接云端和本地应用

  • 多种服务协同作业时的事件处理

流程图解析

流程图的本质是消息处理器链。可以把消息处理器想象成乐高积木块,流程图就是用这些积木块组合而成的。流程图可以有消息源,传入的消息用处理器链进行处理。

image

流程图配置

流程图在xml中用<flow>元素表示。每个流程图都有一个name属性,一个消息源(私有流程图没有消息源),若干个消息处理器以及可选的异常处理策略。

基本结构

<flow name="">
- 0..1 MessageSource
- 1..n MessageProcessor(s)
- 0..1 ExceptionStrategy
</flow>

流程图看似简单,但是可以创造强大的应用。特别是结合Mule表达式,可以对消息内容作精细的处理。许多元素都可以结合表达式使用,包括:

例子

简单的订书处理

<flow>

<file:inbound-endpoint path="/myDirectory">
    <file:filename-filter name="*.xml"/>
</file:inbound-endpoint>

<xml:xslt-transformer xsl-file="bookOrderTransformation.xsl"/>

<splitter expression="xpath://order"/>
<!-- The following message processors will be invoked for each order in the xml file -->

<expression-filter expression="xpath://order[@type='book']"/>

<component class="org.my.BookOrderProcessor"/>

<smtp:outbound-endpoint subject="Order Confirmation" address=""/>

<jdbc:outbound-endpoint />

<default-exception-strategy>
    <jms:outbound-endpoint queue="failedOrders"/>
</default-exception-strategy>

</flow>

流程图的表现

当接收到消息或者消息源送来消息,流程图就会开始运作并且按照配置的顺序依次执行处理链中的消息处理器。某些消息处理器可以配置子消息处理器,这时便会先去执行完这些子消息处理器,再回到原flow继续执行。

上述的情况是流程图配置为单向(one-way)模式时的表现。当传入节点设置为请求相应(request-response)模式时,流程图也会相应的变成请求相应(request-response)模式。流程图的调用者在发送消息后,会从传入节点收到消息响应。若流程图中没有<response>块且消息处理器没有对响应进行任何处理的话,那么流程图就会把处理链中最后一个消息处理器的处理结果作为流程图的响应传回给调用者。若有<response>块存在你的流程图中,则配置了该元素的消息处理器会处理响应消息。一些消息处理器例如CXF,默认的配置是处理响应消息。

注意:当流程图中的最后一个元素配置为单向传出节点时,该元素的执行不会有返回,所以消息的负载会变成NullPayload(空负载)。如果单向元素后面跟着其他的处理器,则后续处理器会收到与前面的单向传出节点所收到消息相同的的传入消息,而不会收到NullPayload。

译注:重点在单向节点后的任何消息处理器都会收到与单向节点所收到相同的传入消息,NullPayload的情况并不会真的出现,请求相应模式下的flow,如果最后一个处理器是单相节点,flow设计器会自动跳过单相节点。而单相模式flow,本来就不需要响应返回。

image

私有流程图

私有流程图是无通过Mule节点从JVM外部访问的,不能对其定义消息源。

私有流程图只能通过相同Mule运行示例中的流程图引用进行访问。在Mule xml配置中,flow-ref元素用来引用流程图。

私有流程图与普通流程图(公共流程图)的差异在于,普通流程图有自己的上下文和异常处理策略,而私有流程图则没有,私有流程图使用引用它的流程图的上下文和异常处理策略。

私有流程图例子

<flow name="privateFlow">
  <append-string-transformer message="b"/>
</flow>

<flow name="publicFlow">
  <http:inbound-endpoint address="http://localhost:8080"/>
  <append-string-transformer message="a"/>
  <flow-ref name="privateFlow"/>
  <append-string-transformer message="c"/>
</flow>

更多内容

阅读下面的博文了解我们在Mule3中追加流程图的原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值