概况
官方定义Spring Cloud Stream是一个构建消息驱动微服务的框架。
应用程序通过inputs或者outputs来与Spring Cloud Stream中的binder对象交互。
通过我们配置来binding(绑定),而Spring Cloud Stream的binder对象负责与消息中间件交互,所以,我们只需要搞清楚如何与Spring Cloud Stream交互就可以方便使用消息驱动的方式。
通过使用Spring Intergration来连接消息代理中间件以实现消息事件驱动。Spring Cloud Stream为一些供应商的消息中间件产品提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的三个核心概念(RabbitMQ和Kafka)。
目的:屏蔽地城消息中间件的差异,降低切换成本,统一消息的编程类型。
设计思想
标准MQ
生产者/消费者之间通过消息媒介(Message)传递信息内容
消息必须走特定的通道(MessageChannel)
消息通道MessageChannel的子接口SubscribableChannel,由MessageChannel消息处理器订阅
CloudStream
比方说我们用到了RabbitMQ和Kafka,由于两个消息中间件的架构上的不同,像RabbitMQyouexchange,Kafka有Topic和Partitions分区。
这些中间件的差异性导致我们实际项目开发给我们造成了一定的困扰,我们如果用了两个消息队列的其中一种,后面的业务需求,我们向往另一种消息队列进行迁移,这时候五一就是一个灾难性的,一大堆东西都重新推到重新做,因为他跟我们的系统耦合了,这时候Spring Cloud Stream给我们提供了一种解耦合的方式。
Binder
在没有绑定器这个概念的情况下,我们的Spring Boot应用要直接与消息中间件信息交互的时候,由于各消息中间件够贱的初衷不同,他们的实现细节上有较大的差异性,通过定义绑定器作为中间层,完美地实现了应用程序与消息中间件细节之间的隔离。通过项应用程序暴露统一的Channel通道,使得应用程序不需要在考虑各种不同的消息中间件实现。
通过定义绑定器Binder作为中间层,实现了应用程序与消息中间件细节之间的隔离。
INPUT对应消费者
OUTPUT对应生产者
Stream中的消息通信方式遵循了发布-订阅模式,Topic主题进行广播,在RabbitMQ就是Exchange,在Kafka中就是Topic
**Binder:**很方便的连接中间件,屏蔽差异。
**Channel:**通道,是队列Queue的一种抽象,在消息通讯系统中就是实现存储和转发的媒介,通过Channel对队列进行配置。
**Source和Sink:**简单的可以理解为参照对象是Spring Cloud Stream自信,从Stream发布消息就是输出,接收消息就是输入。