Spring Integration-简介
Spring Integration的目标
- 为复杂的企业集成方案提供一种简单的模型。
- 提升基于Spring的应用的异步消息驱动能力。
- 为Spring用户提供更多的选择。
Spring Integration的准则
- 组件应该是模块化的、低耦合的、可测试的。
- 对业务逻辑和集成逻辑的关注点应该强制分离。
- 扩展点应该是抽象的(但在明确的范围内),以提升重用性和可移植性。
主要组件
Message(消息)
在Spring Integration中,消息是一个基于Java Object以及相关元数据的包装类。其中包含一个payload及一组header,其中payload可以是任意的类型,在header中包含一些公共的信息,如:id、timestamp、关联id、响应地址等。在header中也可以自定义一些其他的key-value值用于将数据向上下游系统传递。
消息结构图:
Message Channel(消息通道)
消息通道用于解耦消息组件,生产者将消息发送到通道,消费者再从通道中获取消息;在消息传递的同时提供了方便的扩展点,用于消息的拦截和监控。
消息通道结构图:
消息通道支持点对点模式,也支持发布订阅模式;在点对点模式中,发送到通道中的消息仅会被一个消费者接收,而发布订阅模式则会将通道中的消息广播给所有这个通道的订阅者。
消息通道除了提供了点对点模式和发布订阅模式这两种方式来控制可以接收到消息的消费者数量外,还提供了可查询通道,这种通道提供了缓存消息的能力,以防止消费者过载。
Message Endpoint(消息端点)
Spring Integration的一个主要目标是通过控制翻转来简化企业集成方案的开发工作,这意味着用户不需要实现消息的生产者和消费者,甚至不需要装配消息向通道中发送以及从通道中接收消息,用户只需要关注业务域的代码与Spring Integration提供的基础组件进行关联。这些组件能力就是消息端点来提供的。
类似于Web应用中的MVC模式使用service层,这些组件将inbound请求消息传给service作为参数调用,而将service返回的消息转为outbound的响应。