目录

1、简介:

2、架构图:

3、编程模型:

4、使用好处:


1、简介:

Spring Cloud Stream是一个框架,用于构建与共享消息传递系统连接的高度可伸缩的事件驱动微服务。该框架提供了一个灵活的编程模型,该模型建立在已经建立的和熟悉的Spring习惯用法和最佳实践的基础上,包括对持久的发布/订阅语义、用户组和有状态分区的支持。

发布订阅:简单的讲就是一种生产者,消费者模式。发布者是生产,将输出发布到数据中心,订阅者是消费者,订阅自己感兴趣的数据。当有数据到达数据中心时,就把数据发送给对应的订阅者。

用户组:每一个微服务应用为了实现高可用和负载均衡,都会集群部署,如果是按照传统的配置消息,一个应用启动若干个实例,那么消息就会被重复消费。这就需要用到用户组了,将一个应用设置一个组名,这样即便是该应用启动若干个实例也没关系,都是在同一个用户组中,这样就能保证同一条消息只能被同一个用户组中的一个消费者进行接收和处理。

消息分区:通过消费组的设置,虽然能保证同一消息只被一个消费者进行接收和处理,但是对于特殊业务情况,除了要保证单一实例消费之外,还希望那些具备相同特征的消息都能被同一个实例消费,这个就可以使用 Spring Cloud Stream 提供的消息分区功能了。

目前Spring Cloud Stream支持常用的RabbitMQ和Kafka的自动化配置,以及常用的RocketMQ由合作伙伴进行维护。

springCloud-Alibaba——stream消息驱动微服务简介

springBoot、springCloud、springCloud-Stream、springCloud-Alibaba版本关系如下:

Spring Cloud Stream

Spring Boot

Spring Cloud

Spring Cloud Alibaba

Horsham [3.0.x]

2.2.x

Hoxton

2.2.0.RELEASE

Germantown [2.2.x]

2.1.x

Greenwich

2.1.1.RELEASE

Fishtown [2.1.x]

2.1.x

Greenwich

2.1.1.RELEASE

Elmhurst [2.0.x]

2.0.x

Finchley

2.0.1.RELEASE

本地测试使用版本为:

SpringBoot:2.2.5.RELEASE

SpringCloud:Hoxton.SR1

SpringCloud-Alibaba:2.2.0.RELEASE

SpringCloud-Stream:Horsham.SR1

2、架构图:

springCloud-Alibaba——stream消息驱动微服务简介

Inputs:接收消息的通道

Output:发送消息的通道

Binder:可理解为一个抽象的中间件,应用通过在spring cloud stream中所注入的inputs,outputs通道来跟外界消息通信,而这些通道又是通过具体中间件的Binder实现来连接到消息队列的服务器上。有了Binder,甚至可以不改一行代码,就切换中间件的类型。目前Binder实现支持的具体中间件类型为:rabbitMQ 和 kfaka这俩。

应用程序通过input和output与Binder进行交互,input消费者(相对于应用来说是in),output生产者(相当于应用来说是out),Binder是一个让application Core(应用程序)与middleware(消息中间件:kafka、rabbitmq、rocketmq等)集成的一个组件,方便程序与消息中间件的信息交互。Binder将应用程序和消息中间件进行隔离,使得不同消息中间件的实现细节对于应用来说是透明的,不同消息中间件通过Binder向应用程序暴露统一的Channel通道。

3、编程模型:

springCloud-Alibaba——stream消息驱动微服务简介

Destination Binder:目标绑定器,是应用程序与消息中间件通信的组件。

Destination Bindings:目标绑定,Bindings是连接应用程序跟消息中间件的桥梁,用于消息的生产和消费,由Binder(目标绑定器)创建。

Message:消息。

Spring Cloud Stream提供了一系列的预先定义的注解来声明输入型和输出型channel,业务系统基于这些channel与消息中间件进行通信,而不是直接与消息中间件进行通信。

4、使用好处:

比方说我们用到了RabbitMQ和Kafka,由于这两个消息中间件的架构上的不同,像RabbitMQ有exchange,kafka有Topic,partitions分区,这些中间件的差异性导致我们实际项目开发给我们造成了一定的困扰,我们如果用了两个消息队列的其中一种,

后面的业务需求,我想往另外一种消息队列进行迁移,这时候无疑就是一个灾难性的,一大堆东西都要重新推倒重新做,因为它跟我们的系统耦合了,这时候springcloud Stream给我们提供了一种解耦合的方式。

应用通过Spring Cloud Stream插入的input和output通道与外界交流。通道通过指定中间件的Binder实现与外部代理连接。业务开发者不再关注具体消息中间件,只需关注Binder对应用程序提供的抽象概念来使用消息中间件实现业务即可。

通过定义绑定器作为中间层,实现了应用程序与消息中间件(Middleware)细节之间的隔离。通过向应用程序暴露统一的Channel通过,使得应用程序不需要再考虑各种不同的消息中间件的实现。当需要升级消息中间件,或者是更换其他消息中间件产品时,我们需要做的就是更换对应的Binder绑定器而不需要修改任何应用逻辑。甚至可以任意的改变中间件的类型而不需要修改一行代码。目前提供了RabbitMQ、Kafka、RocketMQ等消息中间件的Binder实现。

相关文章: