Apache Servicemix 教程 – EIP基础

有段时间没写这系列文章了,今天“心血来潮”写上一篇.

EIP即Enterprise Information Portal. 是ESB领域一个比较重要的概念,事实上不单单是ESB, EIP可以用在很多地方,相对于BPEL更加底层. 关于EIP有一款非常著名的开源产品,也是apache顶级项目之一 Apache Camel http://camel.apache.org/  这里Servicemix对Camel也有专门的JBI封装,并且Servicemix也很推荐使用Apache Camel作为其EIP.

EIP的范畴太大(我水平也有限),我们这里只讲在Servicemix里的EIP.  推荐一部EIP经典之作,《Enterprise Integration Patterns 》构架师必备宝典之一. 涵盖了EIP所有的设计模型.Apache Camel就是几乎对这本书所讲到的模型都做了实现.堪称经典中的经典.

本章作为基础,不想扯到Apache Camel上去,只对servicemix自带的eip进行讲解.熟悉以后可以轻松过渡到Apache Camel中去.

开始之前,请确认了解XML相关知识,如Xquery、Xpath、命名空间等. 不了解朋友请先在W3C网站上学习相关知识. http://www.w3school.com.cn/x.asp

打开servicemix-eip文档,可看到其支持的11种路由方式. 就一般应用而已也是足够的了.

Content-Based Router 消息内容路由
Message Filter 消息过滤
Pipeline in-only –> in-out 消息桥接.
Static Recipient List 多目的消息路由,即one consumer 到 multi provider
Static Routing Slip 静态路由规则. 即设定路由线路.使其按照线路一步步走下去
Wire Tap 消息监听路由
XPath Splitter 消息分割路由.即把单一消息切割成多个消息
Aggregator 消息聚合路由.即上面的反过来
Content Enricher 内容再造路由.消息通过此路由可以进行一些额外的交互,比如数据库
Resequencer 消息重组.即把多条散列数据重组
AsyncBridge in-out –> in-only 消息桥接.

上表简单对路由功能进行概述. 常用的是这几个路由

  1. Content-Based Router
  2. Static Recipient List
  3. Wire Tap
  4. Aggregator
  5. XPath Splitter

稍微对上面几个常用路由的运用场景进行解释和介绍,更多路由可以购买或下载上面提到的《Enterprise Integration Patterns 》一书.

一、Content-Based Route

最经典的一个路由,基于一个消息的内容的不同,把消息路由到不同的端口上去.

eg. 创建一个客户,ESB接受到客户信息数据后,可以判断客户的级别,把不同级别的客户发往不同的服务提供者上去.

二、Static Recipient List

静态的设定当ESB收到一个条数据后,同时发给多个服务提供者.

eg. 电信前台CRM创建一个客户账户的时候,这个客户信息同事要传递给计费系统BSS又要传递给施工系统OSS,同事建立起客户基本信息.

三、Wire Tap

消息监听模式,当一条消息不管采用in-only还是in-out通过时,都可以对消息进行监听,此过程是异步的.

eg. 做消息监听日志

四、Aggregator

把多条数据聚合后送往一个服务提供者. 多用于复杂数据交互场景. 适用于异步模式.

eg. 银行查询一个人账户的信誉等级. 同时向多家机构发出查询请求, 多家机构对结果通过ESB设置的规则,统一汇总后返回. 比如A机构给出的评价是10分, B机构给出的评价是6分. 通过聚合处理后,可以同事把A和B的评价接收,而不是单独的接收每个系统的数据.

五、Xpath Splitter

消息切割,可以把一个消息按照某种规则,切割成多个小片段的数据.

eg.  一个新系统要采购一个书包名单,往往是发出一个书包名单的集合,而如果目标是一个老系统,接口每次只能处理一本书时,在不改变2个系统接口上,通过配置消息切割路由,在ESB把多本数据切割成单本书,一次传递给老系统.

 

下一章会实例讲解下EIP的配置.

1 条评论。

  1. 兄弟,期待你的下一章啊。