SpringCloud--Stream概述、Binder概述
Spring Cloud Stream
Spring Cloud Stream是一个构建消息驱动微服务框架。
应用程序通过inputs或者outputs来与SpringCloudStream中binder对象交互。通过配置来binding(绑定),而Spring Cloud Stream的binder对象负责与消息中间件交互。所以只需要搞清楚如何与Spring Cloud Stream交互就可以方便使用消息驱动的方式。
通过使用Spring Integration来连接消息代理中间件以实现消息事件驱动。Spring Cloud Stream为一些供应商的消息中间件产品提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的单个核心概念。
目前仅支持RabbitMQ、Kafka。
设计理念
标准MQ:
- 生产者/消费者之间靠消息媒介传递信息内容(Message)
- 消息必须走特定通道(MessageChannel)
- 消息通道里的消息如何被消费,谁负责收发处理(消息通道MessageChannel的子接口SubscribableChannel,由MessageHandler消息处理器所订阅)
引入Cloud Stream:
比如说我们用到了RabbitMQ和Kafka,由于这两个消息中间件的架构上的不同,像RabbitMQ有exchange,kafka有Topic和Partitions分区
这些中间件的差异性导致实际项目开发造成了一定的困扰,如果使用两个消息队列的其中一种,后面的业务需求,我们想往另一种消息队列进行迁移,这时候无疑就是一个灾难性的,一大堆东西都要重新推到重新做,因为它和我们的系统耦合了,这时候springcloud stram提供了一种解耦合的方式。
统一底层差异:
在没有绑定器这个概念的情况下,SpringBoot应用要直接与消息中间件进行信息交互的时候,由于各消息中间件构建的初衷不同,他们的实现细节上会有较大的差异性。通过定义绑定器作为中间层,完美地实现了应用程序与消息中间件细节之间的隔离。通过向应用程序暴露统一的Channel通道,使得应用程序不需要再考虑各种不同的消息中间件实现。
Binder
Stream对消息中间件的进一步封装,可以做到代码层面对中间件的无感知,甚至于动态的切换中间件,使得微服务开发的高度解耦,服务可以关注更多自己的业务流程。
- input对应于消费者
- output对应于生产者
stream中的消息通信方式遵循了发布-订阅模式(Topic主题进行广播)
- RabbitMQ:Exchange
- Kakfa:Topic
还没有评论,来说两句吧...