现在什么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 Integration (-)
热度:93 发布时间:2024-01-10 17:27:27.0
相关解决方案
- Spring MVC开发模式,怎么取得新增的id
- spring 表单对象绑定有关问题 String与Long的转换
- spring+quartz定时器有关问题
- spring @Scope("prototype")注解更新有关问题,寻求帮助
- Spring MVC是不是可以完全取代Struts
- spring+quartz的错误,不能正常启动
- Spring 中 packagesToScan有关问题
- Spring MVC中点击旋钮没反应
- spring 事务 aop transactionManager,该怎么解决
- Struts2+Spring+JPA+FREEMARKER 登录程序异常
- 求SSM分页 struts +spring+mybatis 给小弟我发个学习学习吧 多谢大神们
- spring placeholderConfig的有关问题
- spring 事宜 aop transactionManager
- Spring 和 hibernate如何配置事物
- hibernate与此同时使用多数据源?spring+hibernate
- Spring 动态代理,该怎么解决
- java spring mvc,该怎么解决
- spring mvc 接收对象数组解决办法
- Spring Data 的有关问题
- spring mvc3 使用jackson返回json时候无限循环
- struts+spring+hibernate 开发,在action层调用service层接口,结果替null 注入失败,需高手帮忙
- 生手求教,dwr+struts+spring 页面跳提示框error
- spring IOC 原理解决方法
- uploadify3.1下传 spring+struts2+hibernate框架中取值的有关问题
- tomcat起步后spring自动关闭 Closing Spring root WebApplicationContext
- spring 事务配置不回滚的有关问题。
- spring mvc施用得广泛么
- Spring Quartz定时任务怎么获得ServletContext对象
- Spring MVC中的SimpleControllerHandlerAdapters是作什么用的?该怎么解决
- Spring 的小疑点