Mule学习笔记:LoanBroker范例分析

在执行loanbroker.bat时,系统会首先调用LoanBrokerApp.java→AbstractLoanBrokerApp.run,通过getRequestFromUser方法,在Console与用户交互,让用户输入请求,并将这些请求数据封装为CustomerQuotesRequest,之后通过request来发送请求。

在request方法中,通过MuleClient(专门用来向Mule发送Event或接受Mule的Event的接口),client.dispatch("CustomerRequests", request, null),将request数据发送到CustomerRequests端点(vm://customer.requests)。

在定义中,LoanBroker UMO在监听这个端点,因此触发其Service,执行AsynchronousLoanBroker.getLoanQuote(该方法显示调用了父类的同名方法,因此会先执行DefaultLoanBroker.getLoanQuote),将用户输入的CustomerQuoteRequest转化为LoanBrokerQuoteRequest。
【备注:为什么会执行getLoanQuote方法而不是其他方法呢?没有找到显式的定义。根据http://mule.mulesource.org/display/MULEUSER/Writing+Components解释可知,When an event is received for your component Mule dynamically chooses the method to invoke based on the payload type of the event。查看源代码可知,getLoanQuote(CustomerQuoteRequest request)就是CustomerQuoteRequest对象作为参数的,因此被调用。】
处理完之后,向outbound端点输出,根据定义,将输入发送到jms://esb.credit.agency

CreditAgencyGateway这个UMO监听着jms://esb.credit.agency端点,因此被激活。通过ReflectionMessageBuilder对JMS消息进行处理,然后outbound(注意这里有两个outbound endpoint,将顺序执行)
LoanQuoteRequestToCreditProfileArgs.doTransform
CreditProfileXmlToCreditProfile.doTransform

之后发送到CreditAgency端点,而CreditAgency UMO监听着CreditAgency端点,因此被激活.
通过CreditAgency端点定义的Service调用local/CreditAgency.getCreditProfile方法。

执行完第一个endpoint定义之后,执行第二个。<endpoint address="LenderGateway"/>
这个端口是发送到jms://esb.lender.service。

因为LenderGateway UMO被定义用来监听jms://esb.lender.service,所以会触发LenderGateway UMO.
LenderGateway的Service是org.mule.components.simple.BridgeComponent
执行完之后outbound,这里又是两个outbound endpoint,需要顺序执行。
先发送到定义为LenderService的端点,该端点的定义为:vm://lender.service。 这个可以认为是一个goto的标签,让LenderService UMO来截取输出。

因为LenderService监听着vm://lender.service端点,所以其服务被激活,执行:DefaultLender.setLenderList。该方法调用DefaultLender.getLenders方法,getLenders方法根据loanAmount来判断交给那个(些)银行来处理。然后返回这个(些)银行对象。

完成之后,执行LenderGateway UMO定义的第二个outbound端点:BankingGateway。

BankingGateway端点的定义是:jms://esb.banks,所以接收这个JMS消息。
BankingGateway UMO从jms中获取消息之后,通过transformers="SetLendersAsRecipients ObjectToJMSMessage"来进行格式变化。

在调用SetLendersAsRecipients时,执行了SetLendersAsRecipients.transform,在这个方法中,执行了一个:
context.getMessage().setProperty(StaticRecipientList.RECIPIENTS_PROPERTY, recipients);
通过查询StaticRecipientList的ApiDoc就可以知道,StaticRecipientList is used to dispatch a single event to multiple recipients over the same transport。因此,其调用了:Bank.getLoanQuote

两个transformer都执行完之后,发送响应到LoanQuotes端点。<reply-to address="LoanQuotes"/>,

根据定义:
<response-router timeout="1000000">
    <endpoint address="LoanQuotes"/>
    <router className="org.mule.examples.loanbroker.routers.BankQuotesResponseAggregator"/>
</response-router>
Mule会执行BankQuotesResponseAggregator.aggregateEvents 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值