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