spring integration 主要目的是抽象消息传递,帮助 spring 集成其它协议或者模块,他是消息驱动的,支持路由以及消息的转变。设计的完整思路可以参考《企业设计模式》这本书,剩下的内容中只提实现不提设计原因。
主要的组件
消息

消息以一个对象来抽象,其中 Header 是一个 key-value 对,而 Payload 可以是任何对象。
管道

管道负责连接生产者和消费者(点对点的简单模式,或者点对多的消息订阅模式),支持消费者拉取的管道会使用队列缓存消息,如果是分发的管道则不会缓存消息而是使用消息驱动的模式。
消息端点
这是整个 spring-integration 的核心,以声明式的形式配置一个消息的消费者,而之下的管道等基础设施由 spring 负责,类似于 controller,区别在于 controller 只能接受消息,而消息端点是可以产生消息的。
主要有以下的消息端点:
- Message Transformer
- Message Filter
- Message Router
- Splitter
- Aggregator
- Channel Adapter
通过注解声明的一个消费者端点会在容器中产生两个 bean 一个负责接受消息,一个负责处理消息。负责处理消息的 bean 是有你的一个类直接定义的,而消息的接收者是由容器自动创建的。如果处理消息的 bean 没有继承 AbstractReplyProducingMessageHandler 那么 spring 会使用一个包装器 ReplyProducingMessageHandlerWrapper。
生产者端点也是由两个 bean 组成的,MessageSource (由你定义,产生消息),SourcePollingChannelAdapter 由容器装配,负责处理消息的拉取。
相关注解
- @EnableIntegration
- @IntegrationComponentScan
- @EnablePublisher
- @Publisher
- @GlobalChannelInterceptor
- @IntegrationConverter
额外的
Apache Maven Shade Plugin 在合并 jar 时会忽略 spring.factories