Spring Integration概览 Spring企业应用JMS应用服务器Bean
程序员文章站
2024-02-15 13:22:40
...
现在什么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 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开发的时候非常重要。还是那句话,学习这样的模型,是有助于我们在开发中去处理各种复杂的需求,并且也可以提高自己的设计水平。