现在什么IOC(反转控制),AOP(面向切面编程),DI(依赖注入)对于大多数java企业开发者(这里指用spring来开发企业级应用的开发者)来说,已经是耳熟能详了。那么我们应该怎么样来集成Spring应用之间的系统呢?先去了解一下Spring目前提供分布式的调用吧,方式有:如RMI,HttpInvok,Hessian和Burlap,这四种,配置都差不多,感兴趣的话到网上搜一下,或者可以查阅Spring的相关书籍,这里不再累述。
进入正题,迈入Spring 2.*之后,很多东西都有了改进。Spring Integration作为一个Spring的孵化项目,我也是今年年初的时候才听到的。(下个关注点应该就是Spring的工作流了)。Integration 可以通过xml和annotation来进行相应的配置。它的功能有点像EJB中的消息驱动bean,不过这里换成了消息驱动Spring的bean了。
开始我们的旅程之前先废话两句,说说目标和原则。Integration 的目标是(比较官方的说法):
1.提供一个简单的模型,实现企业系统的集成的解决方案
2.使用方便的,基于Spring应用的消息驱动行为
3.使得更多的Spring用户来使用它
原则是:
1.组件之间应该是松散的,模块性的和易测的
2.应用框架应该强迫分离业务逻辑和集成逻辑
3.扩展节点应该有更好的抽象和可以再使用的能力
废话不多说了,直接切入正题:
Spring Integration的主要组件包括以下部分,这里务必了解这些概念,以便后续更好的理解整个集成的体系
1.Message
就是消息包括header(头)和payload(负载)
message的header一般是id,时间戳或者目的地址什么的,比如如果你发的消息是个文件,那么header应该存放文件的名称,如果是邮件那么,header应该放目的邮件地址,from,cc等内容。至于payload负载,放什么都行,随你
2.Message channel
至于channel就好像一个管子,生产者生产一个消息到channel,消费者从channel消费一个消息,所以channel可以对消息组件解耦,并且提供一个方便的拦截功能和监控功能。这里channel分两种,一种是point-to-point点对点的,一种是publish-subscribe发布订阅形式的,这个和JMS是一样的。(所有消息都是这样的)。如果是点对点的channel,至少会有一个消费者consumer能收到发送的message,另一种订阅发布的channel,spring integration试图去用广播的形式发布message给那些订阅者subscriber,这些都被spring支持。其实采用哪种方式,最终是由用户数量决定的。你也可以实现自己的message channel,这个后面再说。
再多说两句,这块还需要考虑channel的buffer以及consumer是否过载(consumer的数量)。
3.Message Endpoint
顾名思义,就是消息的终点,在channel你不能操作消息,只能在endpoint操作。在这里,可以建立你自己的域模型。你不用修改你的代码,这里只是配置一下无侵入性的声明就行而不需要你改动代码。
4.Transformer
我管它叫变换者(不是机器战警里那个终结者,别记错了),一个message transformer的作用就是把message的内容从一种形式变化到另一种形式。比如从xml文档变成string.这个Transformer也可以增加,删除,修改message的header。
5.filter
过滤器,一个message filter决定一个消息是应该被输出的channel传输。可以用户一个返回boolean的方法来检查一个payload负载的内容类型(还记得payload吧),以及存在的header等等,如果一个消息被接收,它将会被发送到output channel上,如果它没有被接受那么它就会被drop掉的。filter多用于publish subscribe模式中,很多consumer消费者可以收到相同的message并且可以用filter来接收指定类型的消息并将其加工处理。
6.router
路由器,决定哪个channel将被使用,一般来说,是由message的header中的内容或者元数据来决定的。一般router用于filter前期的路由转换。
7.Splitter
分割器,是另一种message endpoint,把消息从input channel上分割发送到它的output channel上。比如用于把一个复合型的payload负载分割成很多子负载payloads。
8.Aggregator
集合器,也是message endpoint的一种,和splitter对应。用于把多种message组合成一个单一的message。事实上aggregator比splitter要复杂一些,因为它需要维持message的状态,决定什么时候提供组合,什么时候超时timeout,甚至可以将一个局部的结果放弃,并发送到一个隔离的channel里。Spring integration提供了一个CompletionStrategy来配置timeout超时,是否在超时的时候发送一个结果并且废弃这个channel(这里应该是说消息废弃这个channel)
9.service activator
服务催化者?这个没法用中文来翻译,我决定保留原文,这里的service activator就是指一般意义上的message endpoint,用来连接应用的接口和message framework消息框架的组件,一个输入的频道input message channel必须被设定,一个service activator的方法被执行并且返回了一个值,那么可以提供一个输出频道output message channel(如果消息提供自己的返回地址,那么这是可选的)。这个规则适用于所有的consumer endpoints。输入从input channel到service activator再到message handler,然后返回output message到service activator到output message channel。
10.channel adapter
频道适配器,这也是个endpoint,用于连接其它系统或者transport传输器。channel adapter也分inbound内绑定和outbound外绑定。一般来说,它用于message和其他对象或者什么东东的mapping,通过received-from或者sent-to这样的系统(比如文件,http request,jms message,等等)Spring integration提供了很多形式的channel adapters,后续将一一介绍。总之我的理解就是这个东东是解决不同系统类型对象映射问题。
最后:这几个概念在用Spring integeration开发的时候非常重要。还是那句话,学习这样的模型,是有助于我们在开发中去处理各种复杂的需求,并且也可以提高自己的设计水平。
分享到:
相关推荐
- **Spring Integration 概览:** Spring Integration 是一个基于 Spring 框架的企业集成解决方案,它提供了一种声明式的、面向消息的方式来构建集成应用程序。 - **组件介绍:** Spring Integration 包括消息通道...
#### 一、Spring Integration概览 **Spring Integration** 是Spring框架的一个扩展项目,它提供了构建企业集成应用程序所需的各种功能和支持。通过利用现有的Spring编程模型和依赖注入特性,Spring Integration使得...
#### 二、Spring Integration框架概览 ##### 2.1 背景 - Spring Integration是基于Spring框架的一个子项目,专注于为企业级应用程序提供集成解决方案。 ##### 2.2 目标与原则 - 目标是为Java EE应用提供一个轻量级...
#### 一、Spring Integration框架概览 **Spring Integration** 是一个由Spring团队开发的开源框架,旨在简化企业级应用中的消息传递和系统集成问题。随着现代企业的不断发展,不同应用程序之间的通信变得越来越频繁...
### Pro Spring for Integration #### 一、概览与背景 《Pro Spring for Integration》是一本由著名出版社Apress出版的英文书籍,旨在介绍如何利用Spring Integration框架构建企业级的集成解决方案。Spring作为一...
### Spring Integration in Action – 关键知识点解析 #### 标题:Spring Integration in Action - **Spring Integration**:本书主要介绍了Spring Integration框架的应用实践。Spring Integration是Spring家族中的...
### Pivotal Certified Spring Enterprise Integration Specialist Exam知识点概览 #### 一、考试概述 Pivotal Certified Spring Enterprise Integration Specialist Exam 是一项旨在验证考生在Spring框架下进行...
#### 一、Spring BlazeDS Integration 概览 ##### 1.1 背景 Spring框架一直以来都致力于成为一个对客户端技术无偏见的平台,允许各种客户端技术接入其核心服务,并根据社区的需求来决定是否添加新的集成解决方案。...
#### 一、Spring BlazeDS Integration 概览 **背景:** Spring框架自设计之初就致力于保持技术中立性,尤其是在处理客户端访问其核心服务时。这意味着Spring并不限定特定的前端技术栈,而是尽可能地提供广泛的兼容...
Spring框架包含了许多模块,这些模块覆盖了各种开发需求,从核心容器(Core Container)到数据访问/集成(DataAccess/Integration)模块,再到Web模块、面向切面编程(AOP)和仪器(Instrumentation)模块,以及测试...
- **Spring Integration Kafka**:这是一个扩展了Spring Integration框架的模块,为Kafka提供了更多的集成选项。 - 示例代码: ```java @Bean public OutboundChannelAdapterSpec kafkaOutbound(Channel channel...
- **Enterprise integration**:讨论了Spring Batch如何与其他企业级应用集成,如JMS、Web Services等。 - **Monitoring jobs**:探讨了如何监控作业的运行状态,以便及时发现问题。 - **Scaling and partitioning**...
#### 一、Spring框架概览 **Spring框架**是一个为企业级应用提供一站式解决方案的轻量级框架。其模块化的设计使得开发者可以根据具体需求选择合适的组件进行集成。Spring框架的核心特性包括但不限于: - **控制...
1. **Spring 概览**:Spring是一个开源的Java平台,它简化了企业级应用的开发,通过提供依赖注入(DI)和面向切面编程(AOP)来管理对象的生命周期和配置。 2. **依赖注入(Dependency Injection, DI)**:DI是...
1.1. 概览 1.2. 使用场景 2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 ...
### Spring Framework 4.1.3 版本关键知识点概览 #### 一、Spring Framework 概览 **1.1 开始使用 Spring** - **简介:** Spring 是一个开源框架,旨在简化 Java 应用程序的开发。该章节介绍了如何开始使用 ...
#### 一、Spring框架概览 - **1.1 依赖注入与控制反转** - 依赖注入(Dependency Injection, DI)是Spring框架的核心特性之一,它允许对象通过外部机制获取其依赖项,而不是在内部创建或查找这些依赖项。这种方式有...
接着文档介绍了Spring Framework的模块构成,包括核心容器(Core Container)、数据访问/集成(DataAccess/Integration)、Web模块、面向切面编程和检测(AOP and Instrumentation)以及测试(Test)模块。...