`
cake918
  • 浏览: 22553 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Mule ESB浅析4——基本概念

    博客分类:
  • SOA
 
阅读更多

ohoh,不会贴图!望知情者赐教。

主要构件

Transport:传输

router:路由

fitler:过滤

componet:处理


transport

针对每一个协议都有专门的实现,内部又细分为:

connector:负责协议的公共属性的维护。

transformer:负责协议到本地处理的格式转换。

endpoint:负责具体的链路的维护,在输入端就为inbound endpoint,负责消息输入链路的创建和监听;在输入端为outbound endpoint,负责建立像外部服务发送消息的链路。

后续根据不同的transport再分别进行介绍。


router:


selective-consumer-router

inbound标签中使用。可以同时添加多个filter。默认情况下,filtertransformer之后的message进行检查,如果需要对transfomer之前的进行检查,则需要设置属性transformFirst

Idempotent Message Filter

只处理唯一的消息,通过消息ID的来识别,消息id通过属性idExpresson指定的表达式生成,默认为#[message:id]

<idempotent-message-filter>:子元素simple-text-file-store——指定存储消息ID的位置。

 

Idempotent Secure Hash Message Filter

 通过计算消息的哈希值来确保处理的消息时唯一的。

 

Collection Aggregator

将具有相同属性(group id等)的输入消息进行聚合。

<collection-aggregator>,属性timeout—等待的时长,failOnTimeout—超时是否直接发送。

<custom-aggregator>,定义用户自己的消息聚合方法,类中需要实现MessageProcessor方法,并继承AbstractAggregator。也可以是spring bean

 

Message Chunk Aggregator

将拆分的消息重新组合。

<message-chunk-aggregator>

 

Correlation Resequencer

correlation-resequencer-router,通过消息相关的顺序属性对一组消息进行排序。包括timeoutfailOnTimeout属性。

Forwarding Router

<forwarding-router/>,直接将消息发到outbound,而不经过component的处理。目前集成已有的web应用,通过此处方式最为简便。

建议使用bridge pattern来代替之。

 

WireTap Router

inbound配置,可以将消息路由到其他endpoint(与发到component的相同)。比如对消息进行入队列的备份等。不会更改正常流程,只添加一个拷贝的处理。如果需要同时分发到多处处理时,使用多个wire-tap-router是比较好的选择,此时类似并发处理。如果在每个router中增加filter功能,则就类似if条件分支的处理。

 

Matching All Routers

默认情况下,消息有首个满足条件的outbound router处理。如果需要由所有满足条件的outbound router进行处理,则需要设置outboundmatchAll属性。这里也类似与if条件分支。

Request Reply

在一个channel上接收消息,异步的处理服务,使用另一个channel来异步接收处理结果。

Collection Splitter

如果消息负载为Collection类型,则将消息集合中的每一个成员单独发给消息处理者。

<collection-splitter>:属性enableCorrelation—决定是否对每一个单独的消息设置一个对应的ID


Filter:


Payload Type Filter

元素为:<payload-type-filter expectedType="”/>。对负载的类型进行检查。

 

Expression Filter

元素为:<expression-filter evaluator="xpath" expression="”>。采用表达式进行检查,检查方式使用evaluator进行指定,这里可以是header,payload-type, exception-type, wildcard, regex, ognl, xpath, jxpath, bean, groovy, or custom。此外可以通过nullReturnsTrue属性来决定表达式为null时,是否返回true

 

RegEx Filter

元素为:<regex-filter pattern="the quick brown (.*)"/>,对消息负载使用正则表达式进行匹配。这里filter会对payload使用toString()操作,因此只针对string类型使用正则匹配。

 

Wildcard Filter

元素为:<wildcard-filter pattern="the quick brown *"/>,使用通配符对消息负载进行匹配。这里filter会对payload使用toString()操作,因此只针对string类型使用正则匹配。

 

Exception Type Filter

元素为,<exception-type-filter expectedType="java.lang.RuntimeException"/>,匹配异常类型。

 

Message Property Filter

元素为,<message-property-filter pattern="Content-Type=text/xml" caseSensitive="false"/>,对消息的属性进行匹配,比如http的消息头。caseSensitive属性用于指定是否区分大小写。

 

Logic Filters

包括<and-filter><or-filter><not-filter>,对多个filter进行组合使用。

消息传输方式

同步方式:

    在MuleFlow中,针对某个消息的后续处理都会固定在一个线程中完成,支持request-response方式,此时服务必须是synchronousinbound endpoint,并且没有outbound endpoint


当信息进入Inbound时是由线程a来进行处理,那么该消息进入到Component时也是由线程a进行处理,Component处理完毕后,返回给Inbound由同样的线程a处理完成并返回结果。

如果有outbound,则会阻塞等待outbound目标应用响应,直到超时。同步调用总会返回一个结果,即使有outbound endpoint存在。其返回的值与outbound出去的一致。


异步方式:

MuleFlow中,当信息通过每个信息的处理阶段都可以使用不同的线程来进行处理。(one way通讯方式)

当消息进入Inbound时,由线程a处理,当消息被放入SEDA队列后,由线程b来负责处理消息。该调用没有返回值。这里的服务必须有一个异步的inbound endpoint


整个调用过程中间可以有多个outbound

可以在outbound router设置reply-to,同时在需要获取响应的endpoint设置<async-reply>元素。

如果出错,则Mule server会对其进行处理,可以使用error endpointrouter该错误,发起该调用的客户端可以在单独的线程上监听error queue,也可以有一个单独的error处理客户端。——异步客户端也是能获取返回值的。注意与flow的区别!

消息的通信方式可以在connectorendpointtransport中进行设置。使用exchange-pattern属性来指定。


这里官网上的说明比较全,网上也有很多资料,不多啰嗦了。



 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics