一、概述
Spring Integration是Spring框架创建的又一个API,面向企业应用集成(EAI)。它是可以理解为一种ESB框架,可以和EJB、RMI、JMS这些标准技术协同使用,使得各个应用之间可以协同通讯。另一个优点是它可以和应用一起部署而不需要单独建立ESB服务器。
二、Spring Integration 组件
1.1、 Messages (消息)
Spring Integration 中,将消息定义为一个通用的接口,它封装了Spring Integration需要操纵的数据和该数据的元数据。
A、PayLoad (负载):Spring Integration需要操纵的数据,它可以是任何Java的POJO。你可以根据情况将其转换为特定的或者自定义的数据类型。
B、MessageHeaders (消息头):它是PayLoad的元数据。 例如一些通用的请求信息。消息头是一个 org.springframework.integration.MessageHeaders类型的对象,
本质上它是一个以String类型为Key,Object类型为Value的只读Map,也就是说消息头中的信息是不可更改的。它也可以用来存储任何的键值对。
在Spring Integration中通常MessageBuilder API来创建,并且Spring Integration预定义了一些消息头实例:
消息头名称 | 消息头数据类型 |
ID | java.util.UUID |
TIMESTAMP | java.lang.Long |
CORRELATION_ID | java.lang.Object |
REPLY_CHANNEL | java.lang.Object |
ERROR_CHANNEL | java.lang.Object |
SEQUENCE_NUMBER | java.lang.Integer |
SEQUENCE_SIZE | java.lang.Integer |
EXPIRATION_DATE | java.lang.Long |
PRIORITY | java.lang.Integer |
1.2 、Message Channel(消息通道)
Message Channel 可以看成一种pipe(管道),消息通过它进行移动(流转)。消息生产者发送一个消息到Message Channel,消息消费者从一个Message Channel中接收一条消息。并且Message Channel还提供了一个切入点来截断(interception)和监控(monitoring)消息。Message Channel有两种模式,一种模式是Point-to-Point(点对点)模式,另一种是Publish/Subscribe(发布/订阅)模式;前者保证在任何时候,发送者发送的同一个消息都只有一个接收者;而后者则允许生产者和消费者之间是一对多的关系,多个消费这可以接受同一个消息;当所有的订阅了该消息的消费者都消费了该消息后消息会被标记为已接受并且从通道中删除。另外消息通道还可以缓存消息,有的消息可以直接发布接收者,有的消息可以发送到一个Message Channel队列进行缓存。
1.3、Message Endpoint(消息端点)
Message Endpoint是介于消息系统和应用程序代码之间的一个抽象层。Message Endpoint用来执行类似 生成或者消费消息,连接应用层代码,连接扩展服务或者其他应用等任务。当以Spring Integration的方式传送数据的时候,数据会沿着Message Channel从一个Message Endpoint移动到另一个Message Endpoint;数据还可以通过使用一种叫做适配器(adapter)的Message Endpoint从外部系统传入消息框架。Spring Integration提供了大量的adapters来对接外部系统和服务。通常Spring Integration以声明式配置的方式定义Message Endpoint。下表列出了Spring Integration中的几种Message Endpoint。
消息端点名称 | 消息端点概述 |
Transformer(转换器) | 转换消息的内容或者结构,返回转换后的消息。 |
Filter(过滤器) | 决定消息是否能够通过消息通道(进行传递) |
Router(路由器) | 基于一个指定的消息的上下文,决定将消息发送到哪个消息通道(类是路由器的概念) |
Splitter(分离器) | 可以将一个输入消息分解为多个消息并发送到合适的消息通道。 |
Aggregator(聚合器) | 可以将多个消息组合成一个消息。因为它需要维持消息状态,和分离器比起来,聚合器通常比较复杂 |
Service activator(服务对接器) | 消息通道和服务实例之间的接口,通常包含应用层的业务逻辑代码。 |
Channel adapter(通道适配器) | 用来连接消息通道和其他系统 |