Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

mule示例分析(2)

来源: 未知 分享至:


四、Loan Broker (基于Enterprise Integration Patterns book 一 EIP书中的例子 ,mule不鸟JBI和SCA,唯遵SEDA和EIP,有个性)
Loan Broker贷款中介(也叫loan agent service)是mule的主要演示例子,顾名思义,就是客户向银行申请贷款的故事。先看一下背景知识:
以往的贷款请求流程如下图

1) 客户customer 向不同的银行bank 发起请求搜寻最优利率。
2) 每家银行都要向客户询问社保号码ss、贷款数量以及期限。

3) 每家银行都要对该客户做信用背景调查:通常是咨询征信所credit bureau (通过征信中介credit agency ),最后银行才能根据这些信息发放贷款。

4) 客户接收到所有银行的反馈以后,从中选择一家最好的,比如说利率最低

加贷款中介以后,这个处理流程可以更加自动化、允许客户在线获取更多银行的实时反馈,耗时要比一家一家询问少得多:

1) 接收到客户请求以后,loan broker贷款中介从征信所获取该客户的信用信息。

2) 替该客户向贷方服务lender service 列出的所有银行发出贷款请求(例子中这个服务啥也没做只是个意思)

3) 将反馈的贷款额度信息打包发送回用户供选择(例子中就是选择返回利率最低的那家银行)

这其中的角色包括
1、贷款中介服务http/rest(接收客户的http贷款请求,包含社保号、贷款额、期限并负责相应放贷信息)。

2、征信所服务EJB(由贷款中介公司管理的EJB外部服务,做信用检查的,暴露一个名为creditAgency的EJB的getCreaditProfile方法)

3、征信所网关(例子中的网关做的事情都是:在JMS消息总线和 外部应用或服务/征信所服务应用 之间整理请求)

4、贷方服务VM(根据客户的资信评分等信息选择请贷的银行,本地pojo组件,决定请求哪几家银行)

5、贷方网关(在消息总线到贷方服务应用之间整理请求)

6、银行网关(向多家银行分发贷款请求)

7、还有几家银行bank(soap协议的消息服务、为了简化、所有银行暴露同样的ws接口。当然你也可以配置不同接口的多家银行)。



都算是应用,以往的应用之间通讯是点对点,客户自己去一家一家调用银行服务、所有银行都一遍一遍地调用征信所。而loanBroker就相当于我们的ESB,加入loanBroker以后就不再是点对点而是点对面,ESB就是面、覆盖了征信所、所有银行及各个网关的一个门面(这么看ESB蛮像一个fasade的嘛),这个门面替应用摆平一切,你只要说我要贷款!、其他的如你的资信评级、你都要请求谁、你的请求还需要依赖什么都包办,有事您只管说句话就得。
例子涉及异步的请求/响应处理模型;对JMS、http/rest、vm、soap、EJB各种协议的调用;把bank暴露为ws。总线中的消息用LoanQuoteRequest 代表,本例中这是个javaBean格式,但是实际中往往是个xml格式(用了ESB,我发现对消息这个东东来说格式是五花八门的:javabean pojo、xml、http参数、stdio、soap甚至json...)
loan broker的示例包含ESB和ESN两种布局的版本,含义参见Mule Topologies的5种拓扑布局:
ESB、ESN企业服务网、对等网(这不又成了点对点了么,不推荐)、C/S以hub为中心的辐射方式(可能性能有问题,不推荐)、管道方式(服务编排?)

1、示例翻译:
Loan Broker ESB基于当前的Loan Broker示例 但是实现了一个完整的ESB架构,该例子演示了如何使用HTTP/REST、 Web Services、EJB、JMS,他是根据典型ESB实现来配置的。

Loan Broker ESB使用了JMS消息总线以提供在不同组件和应用间的公共消息通道:

组件:
1、Loan Broker Service贷款中介服务 :接收贷款请求(信息包括SS社保号码、贷款额度、期限)并负责收集放贷反馈向客户反馈。

2、Credit Agency Service征信所服务 :外部服务提供者、它对客户的授信进行检验以确保合理的放贷额度。

3、Credit Agency Gateway征信所网关 :在消息总线和征信所应用之间整理请求。

4、Lender Service贷方服务 :基于客户的资信评分,放贷额度和期限,由贷方服务选择请求贷款的银行。

5、Lender Gateway贷方网关 :从消息总线到贷方应用之间整理请求。

6、Banking Gateway银行网关 :基于贷方列表、向一家或多家银行分发贷款请求。

总体流程:

1,客户应用向LoanBroker 贷款中介服务 发出 CustomerQuoteRequest消息 。
2,LoanBroker 贷款中介服务 创建一个 LoanQuoteRequest 消息,这是总线通用消息格式。
3,Mule通过JMS向Credit Agency Gateway 征信所网关 发送该消息。
4,网关整理请求、调用CreditAgency EJB组件,RelectionMessageBuilder自动将CreditProfile附加到LoanQuoteRequest 消息上 。
5,Mule通过JMS向Lender Gateway贷方网关 发送该消息.
6,贷方网关 使用VM传输调用贷方服务 .
7,Mule通过JMS向Banking Gateway银行网关 发送该消息.
8,Banking Gateway银行网关 通过Axis实现的SOAP调用银行服务.
9,每家银行都把自己的贷款报价附加到请求中并通过应答地址ReplyTo 发回LoanBroker 贷款中介服务 。应答地址是由Banking Gateway银行网关 提供的.
10,LoanBroker 贷款中介服务 的ResponseRouter响应路由接收对应答地址 的响应,它选择最低利率并返回客户。


本例中,消息总线上的通用消息格式是java bean格式。一般情况下如JMS规范要求总线内的通用消息是xml格式,但是mule允许你使用任何数据格式,两种格式各有优缺,xml的文本消息允许你方便的直接实施xslt转换器之类,bean方式在component中更便于编码处理,两种方式也都方便用路由器去根据消息内容做路由判断。我们先来定义这个消息bean:LoanQuoteRequest(org.mule.example.loanbroker.messages.LoanBrokerQuoteRequest):
public class LoanBrokerQuoteRequest implements Serializable//由于需要在jms通道传输所以需要实现序列化  
{  
    /** 
     * Serial version 
     */  
    private static final long serialVersionUID = 46866005259682607L;  
  
    /** The customer request  
     * The request contains Customer info and loan amount and duration */  
    private CustomerQuoteRequest customerRequest;  
  
    /** credit profile for the customer  */  
    private CreditProfile creditProfile;  
  
    /** A list of lenders for this request */  
    private Bank[] lenders;  
  
    /** A loan quote from a bank */  
    private LoanQuote loanQuote;  
      
    //get/set方法  
}  


客户的初始请求触发整个事件处理流,客户使用浏览器以htt协议请求mule rest服务,这个服务当然得向外暴露,暴露的方式就是配置贷款中介端点 (CustomerRequestsREST)
<endpoint name=\"CustomerRequestsREST\" address=\"jetty:rest://localhost:8888/loanbroker\" />

这句话的配置含义:
1、内嵌Jetty servlet引擎
2、mule启动jetty在8888端口上监听rest请求
3、把rest servlet绑定到/loanbroker上下文
来自客户的初始rest请求格式为:
http://localhost:8888/loanbroker/?name=Ross+Mason&ssn=1234& loanAmount=10000&loanDuration=24

贷款中介端点 以http参数形式接收下来,需要转换为CustomerQuoteRequest对象,所以增加了一个自定义转换器:
<custom-transformer name=\"RestRequestToCustomerRequest\" class=\"org.mule.example.loanbroker.transformers.RestRequestToCustomerRequest\" />  

这个转换器要用在贷款中介端点 上,在贷款中介服务的入站inbound配置上、入站端点endpoint引用了贷款中介端点(CustomerRequestsREST)、同时也引用了这个转换器。也就是说从贷款中介端点 上接收的rest请求都直接用这个转换器予以转换:
<service name=\"LoanBroker\"><!--贷款中介服务-->  
            <description>  
                The LoanBroker service is our \'entry\' service that accepts requests from the outside world  
            </description>  
            <inbound>  
                <inbound-endpoint ref=\"CustomerRequestsREST\" transformer-refs=\"RestRequestToCustomerRequest\" /> 






  • 大小: 35.5 KB
  • 大小: 19.3 KB
  • 大小: 5 KB
  • 大小: 5.2 KB
  • 大小: 29 KB
  • 大小: 54.4 KB
  • 查看图片附件

Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史