springcloud----消息驱动--stream--理论

为何引入cloudStream

MQ(消息中间件):ActiveMQ、RabbitMQ、RocketMQ、Kafka ? 痛点
cloudStream 屏蔽底层的具体MQ类型 ,

什么是SpringCloudStream

  • 官方定义,Spring Cloud Stream 是一个消息驱动微服务框架。
  • 应用程序通过inputs 或者 output 来与 Spring Cloud Stream 中binder 对象交互。
  • 通过我们配置来 binding (绑定),而 Spring Cloud Stream 的binder 对象负责与消息中间件交互。
  • 所以,我们甚至需要搞清楚如何与 Spring Cloud Stream 交互就可以方便地使用消息驱动的方式,
  • 通过使用Spring Integration来连接消息代理中间件省市县消息事件驱动
  • Spring Cloud Stream 为一些供应商的消息中间件提供了个性化的自动化配置实现,引用了发布 - 订阅、消费组、分区的三个核心概念。
  • 目前支持 RabbitMQ 、Kafka
    一句话屏蔽消息中间件的差异,降低切换恒本,统一的消息编程模型

Stream官网地址 : https://spring.io/projects/spring-cloud-stream
中文文档地址:https://m.wang1314.com/doc/webapp/topic/20971999.html


设计思想

标准MQ

标准MQ

  • 生产者/消费者之间靠消息媒介传递内容 : Message
  • 消息必须走特定的通道消息通道 MessageChannel
  • 消息通道中的消息如何被消费, 谁来负责收发处理消息通道 MesssageChannel 的子接口 SubscribableChannel , 由 MessageHandler 消息处理器所订阅

为什么用 Cloud Stream

比方说我们用到了 RabbitMQ 和 Kafka , 由于这两个消息中间件的架构上的不同, 像RabbitMQ有 exchange, kafka 有 topic 和 Partitions 分区。

模型
这些中间件的差异导致了我们实际开发项目中成了一定的困扰,我们如果用这两个消息队列其中的一种, 后面的后续业务需求,我们想往另一种消息队列进行迁移,这个时候就无疑是灾难性的,一大堆东西都要推到了重新做,应为他跟我们的系统耦合了,这时候 springcloud stream 给我们提供了一种解耦的方式。

Stream 为什么可以统一底层的差异

在没有绑定器这个概念的情况下,我们的 Spring Boot 应用要直接与消息中间件进行信息交互的时候,由于各个消息中间件构建的初衷不同,他们的实现细节上会有较大的差异性
通过定义绑定器作为中间层,完美实现了 应用程序与消息中间件细节之间的隔离
通过向应用程序暴露统一的Channel 通道,使得应用程序不需要在考虑各种不同的消息中间件实习先。
通过自定义绑定器 Binder 作为中间层, 实现了应用程序与消息中间件细节之间的隔离

Binder


INPUT : 对应于消费者 / OUTPUT : 对应于生产者


在没有绑定器这个概念的情况下, 我们的 Spring Boot 应用要直接与消息中间件进行消息交互的时候,由于各消息中间件构建的初衷不同,他们的实现细节上会有较大的差异,通过自定义绑定器作为中间层,完美的实现了应用程序与消息中间件细节之间的隔离。Stream 对消息中间件的进步一风筝,可以做到代码层面对中间件的无感知,甚至于动态的切换中间件(rabbitmq 切换为 kafka ), 是的微服务开发法的高度解耦, 服务可以关注更多自己的业务流程。

通过自定义绑定器 Binder 做为中间层,实现了应用消息与中间消息细节之间的隔离。
处理架构

Stream 中的消息通讯方式遵循了发布-订阅模式

Topic 主题进行广播

  • 在RabbitMQ 就是 Exchange
  • 在Kafka中就是 Topic

Spring Cloud Stream 标准流程套路

处理逻辑
Binder :很方便的连接中间件,屏蔽差异
Channel : 通道,是队列 Queue 的一种抽象,在消息通讯系统中就是实现存储转发的媒介,通过channel 队列进行配置
Source 和 Sink : 简单的理解为参照对象 Spring Cloud Stream 自身,从 Steam发布消息就是输出接受消息就是输入

编码API 和 常用注解

官方架构图

组成说明
Meddleware中间件,目前只支持 RabbitMQKafka
BinderBinder 是应用消息中间件之间的封装, 目前实现了 Kafka 和 RabbitMQ 的Binder 通过 Binder 可以很方便连接中间件,可以动态的改变消息类型(对于 Kafka 的 topic , rabbitMQ 的 exchange), 这些都可以通过配置文件来实现。
@Input注解标识输入通道,通过该输入通道接收到的消息进入应用程序
@Output注解标识输入通道,发布的消息将通过通道离开应用程序
@StramListener监听队列,用于消费者的队列的消息接受
@EnableBinding信道 channel 和 exchange 绑定在一起。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值