首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

ESB之旅(loanBroker续二)

2012-11-01 
ESB之旅(loanBroker续2)? 对LoanBroker例子结构已经清晰了,启动脚本首先用openEJB启动一个EJB服务作为外部

ESB之旅(loanBroker续2)

? 对LoanBroker例子结构已经清晰了,启动脚本首先用openEJB启动一个EJB服务作为外部应用——充当CA(credit agency)征信所角色。之所以采用这样一个场景是因为:无论是数据层面的整合还是应用层面整合无论做什么业务整合、都不可能把客户贷款请求应用客户信用调查应用 整合到一块,从现实世界来看前者可能发起于客户自己的电脑或者某银行信贷部电脑的浏览器上,后者是存在于社会保障机构或者国税局或者银监银联系统之中的对外服务,现实中二者属于监管被监管关系,是不可能整合的,就像公检法不可能合并一样。

? 所以例子一定要在mule之外令起一个服务就是CA服务,可能为了演示与传统EJB的通讯能力而采用EJB的形式来暴露CA服务(当然也可以用其他的如corba、webservice...)

? 上回说道我的目标就是废掉这个EJB,原因很简单:EJB我不会。废掉这个EJB的好处是可以在eclipse+muleIDE中启动调试这个例子,调试方式有两种:

? 1、以java application方式运行org.mule.example.loanbroker.esb.LoanBrokerApp

? 2、借助muleIDE直接在loan-broker-esb-mule- config.xml上右击选择run as运行为 -> Mule Server

? 第二种就越过LoanBrokerApp了,相当于直接调用org.mule.MuleServer,所以控制台输出啥的就没有了,只能从浏览器输入rest请求(http://localhost:8888/loanbroker/?customerName=RossMason&ssn=1234&loanAmount=10000&loanDuration=24,这个格式是以mule2.2.1为准的)

? 本来想把CA改为webservice服务调用,结果先改成了更简单的本地javabean调用,因为我发现了这个类:org.mule.example.loanbroker.credit.DefaultCreditAgency,具体可以自己去看看,这个类没有被用到的地方。但是我发现用这个类可以方便替换CA EJB

?

? 所有的工作集中在对loan-broker-esb-mule-config.xml的改造上。在此之前参阅mule-2.2.1-getting-started.pdf手册的Tutorial第四课、有必要复习一下消息路由的知识,里面的message style消息样式介绍了mule消息的4种样式:

? 1、无需答复的异步 (类似于只是发了个信号、调用者也不要求响应、调用方程序直接就返回了、在mule这一边用SEDA thread pool来处理,mule需要配置异步的inbound endpoint。 MEPs (message exchange patterns)=In-only)

ESB之旅(loanBroker续二)

? 2、单组件的同步请求-响应(一个inbound、一个service)得设置端点属性synchronous="true" (HTTP/S, SSL, TCP, and Servlet类型端点的默认设置。MEPs=In-Out, In-Optional-Out)

ESB之旅(loanBroker续二)

? 3、多组件的同步请求-响应(一个inbound、多个service)得设置 inbound endpoint属性synchronous="true"(设置头一个service即可、随后的service都默认是 synchronous。 MEPs=In-Only, In-Optional-Out, In-Out

ESB之旅(loanBroker续二)

? 4、多组件异步请求-响应(允许后台处理分支调用外部服务并将多个外部服务的返回结果整理成最终答复作为响应。The Async Reply Router is used to listen on a Reply To endpoint for results. 使用异步应答路由来监听对请求端点的应答响应 ,所谓异步应答路由就是<async-reply>配置元素,见下图示底下的那个Async-Reply元素,这个元素属于service、但是与component是平级关系,也就是说它与component是不同线程运行的、component先跑完、然后就启动Async-Reply异步应答器 、随后再把请求发往右边的outbound...这时component就执行完了、当请求有应答的时候、应答不是发往component而是Async-Reply异步应答器,它再处理后响应给调用方 。MEPs=In-Out, In-Optional-Out)

ESB之旅(loanBroker续二)

? 你可以将入站端点的synchronous属性设置为false,因为异步回复路由器会处理该回复,除非你想给调用者发送响应。

? 本例属于第4种外加同步异步都有的混合模式,场景最复杂也最有代表性(就像本文一开头提到的)、最能说明ESB的价值所在。具体说一个是使用了bingdings绑定另一个就是Async-Reply异步应答器 、用于需要响应、但是消息响应之前需要经过整理 、处理消息的多个任务是并行执行(异步)的场景,每个任务完成以后、各自返回的消息经过统一整理 后再最终答复请求者。我们这里的各个银行可以看作多个任务,各个银行全部返回贷款利率以后,经过对比找出最低利率这就是消息的整理 ,然后再返回这个最低利率作为最终答复。多组件异步答复允许后台分支 处理,说白了就是使用bindings 配置向外部服务发出请求。异步应答器 有两个属性:timeout和failOnTimeout,timeout设置的时间到达时还没有得到所有的消息返回的话会抛异常、failOnTimeout设置为false后则timeout设置的时间到达时将现有返回的消息进行处理并且不会抛异常。

? Async-Reply异步应答器有两部分组成、参考本例的配置:

? 那么是谁通过这个消息通道向Async-Reply异步应答器 返回消息的呢?是BankingGatewayService银行网关服务,它的出站端点就是LoanQuotes,那么这块的大致流程也清晰了。银行网关服务的出站配置:

使用了reply-to(应答到)元素配置异步应答的目标消息通道。

? 到此我们额外详细分析了两个mule最重要的配置元素:bindings外部服务绑定和 Async-Reply异步应答器。下面再详细看看怎么废掉了EJB实现eclipse内调试LoanBroker

热点排行