Stream知识

一、产生背景

现在被广泛使用的消息中间件有ActiveMQ、RabbitMQ、RocketMQ、Kafka。这些中间件的差异性导致我们在实际项目开发中会遇到诸多问题。譬如,最开始我们使用其中一种消息中间件,后面因业务要求需要往另一种消息中间件迁移,这对开发人员来说无疑是个头疼的问题,一大堆东西都要推倒重做Stream屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型,有效解决了上述问题

二、Spring Cloud Stream介绍

官方定义 Spring Cloud Stream 是一个构建消息驱动微服务的框架

应用程序通过 inputs 或着 outputs 来与 Spring Cloud Stream 中 binder对象 交互。通过我们配置来binding(绑定),而 Spring Cloud Stream 的binder对象负责与消息中间件交互。所以,我们只需要搞清楚如何与 Spring Cloud Stream 交互就可以方便使用消息驱动的方式

通过使用 Spring Integration 来连接消息代理中间件以实现消息事件驱动。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的三个核心概念

目前仅支持 RabbitMQ、Kafka
在这里插入图片描述

三、设计思想

3.1 标准MQ

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

3.2 Binder

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

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

Binder中,input对应于消费者、output对应于生产者。Binder可以做到代码层面对中间件的无感知,甚至于动态的切换中间件(例如:rabbitmq切换成kafka),使得微服务开发的高度解耦,服务可以关注更多自己的业务流程

3.3 Stream的消息通信方式

Stream的消息通信方式遵循了 “发布-订阅模式”。使用Topic主题进行广播(在RabbitMQ中就是Exchange;在kafka中就是Topic)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值