有段时间没写这系列文章了,今天“心血来潮”写上一篇.
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 消息桥接. |
上表简单对路由功能进行概述. 常用的是这几个路由
- Content-Based Router
- Static Recipient List
- Wire Tap
- Aggregator
- 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的配置.
兄弟,期待你的下一章啊。