SpringCloud Stream消息驱动组件

image

一、Stream解决的痛点问题

Spring Cloud Stream 消息驱动组件帮助我们更快速,更方便,更友好的去构建消息 驱动微服务的

MQ消息中间件广泛应用在应用解耦合异步消息处理流量削峰等场景中

不同的MQ消息中间件内部机制包括使用方式都会有所不同,比如RabbitMQ中有 Exchange(交换机/交换器)这一概念,kafka有Topic、Partition分区这些概念, MQ消息中间件的差异性不利于我们上层的开发应用,当我们的系统希望从原有的 RabbitMQ切换到Kafka时,我们会发现比较困难,很多要操作可能重来(因为应用 程序和具体的某一款MQ消息中间件耦合在一起了)

Spring Cloud Stream进行了很好的上层抽象,可以让我们与具体消息中间件解耦 合,屏蔽掉了底层具体MQ消息中间件的细节差异,就像Hibernate屏蔽掉了具体数 据库(Mysql/Oracle一样)。如此一来,我们学习、开发、维护MQ都会变得轻松。 目前Spring Cloud Stream支持RabbitMQ和Kafka

本质:屏蔽掉了底层不同MQ消息中间件之间的差异,统一了MQ的编程模型,降低 了学习、开发、维护MQ的成本

二、Stream重要概念

Spring Cloud Stream 是一个构建消息驱动微服务的框架。应用程序通过inputs(相 当于消息消费者consumer)或者outputs(相当于消息生产者producer)来与 Spring Cloud Stream中的binder对象交互,而Binder对象是用来屏蔽底层MQ细节 的,它负责与具体的消息中间件交互

image-20220325012105250

Binder绑定器

Binder绑定器是Spring Cloud Stream 中非常核心的概念,就是通过它来屏蔽底层 不同MQ消息中间件的细节差异,当需要更换为其他消息中间件时,我们需要做的就 是更换对应的Binder绑定器而不需要修改任何应用逻辑(Binder绑定器的实现是框 架内置的,Spring Cloud Stream目前支持Rabbit、Kafka两种消息队列)

三、传统MQ模型与Stream消息驱动模型

image-20220325012155961

四、Stream消息通信方式及编程模型

4.1 Stream消息通信方式

Stream中的消息通信方式遵循了发布—订阅模式。

在Spring Cloud Stream中的消息通信方式遵循了发布-订阅模式,当一条消息被投 递到消息中间件之 后,它会通过共享的 Topic 主题进行广播,消息消费者在订阅的 主题中收到它并触发自身的业务逻辑处理。这里所提到的 Topic 主题是Spring Cloud Stream中的一个抽象概念,用来代表发布共享消息给消 费者的地方

4.2 Stream编程注解

image-20220325012320656

五、Stream高级之自定义消息通道

public interface LogProcessor {

    String INPUT_LOG = "input_log";
    String OUTPUT_LOG = "output_log";

    @Input(INPUT_LOG)
    SubscribableChannel inputLog();

    @Output(OUTPUT_LOG)
    MessageChannel outputLog();
}
  • 在 @EnableBinding 注解中,绑定自定义的接口,使用 @StreamListener 做监听的时候,指定输入消息的channel

    @EnableBinding(LogProcessor.class)
    public class LogMessageConsumerServiceImpl {
    
    
        @StreamListener(LogProcessor.INPUT_LOG)
        public void receiveMessage(Message<String> message) {
            System.out.println("========LOG接受消息:" + message);
        }
    }
  • 配置文件绑定

    bindings: # 关联整合通道和binder对象
            input: # output是我们定义的通道名称,此处不能乱改
              destination: wuzxExchange # 要使用的Exchange名称(消息队列主题名称)
              context-type: text/plain # 消息类型设置,比如json
              binder: localRabbitBinder # 关联MQ服务
              group: wuzxGroup
            input_log:
              destination: wuzxTestExchange
              context-type: text/plain # 消息类型设置,比如json
              binder: localRabbitBinder # 关联MQ服务
              group: wuzxTestGroup
            output_log:
              destination: wuzxTestExchange
              context-type: text/plain # 消息类型设置,比如json
              binder: localRabbitBinder # 关联MQ服务

    六、Stream高级之消息分组

    消费者端有两个(消费同一个MQ的同一个主题),但是呢我们的 业务场景中希望这个主题的一个Message只能被一个消费者端消费处理,此时我们 就可以使用消息分组。

    解决的问题:能解决消息重复消费问题

    多个消费者实例配置为同一个group名称(在同一个group中的多个消费者只有 一个可以获取到消息并消费)

    input_log:
              destination: wuzxTestExchange
              context-type: text/plain # 消息类型设置,比如json
              binder: localRabbitBinder # 关联MQ服务
              group: wuzxTestGroup
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Stream 是 Spring 提供的一种用于构建基于消息中间件的应用程序的框架。它提供了一种基于注解的编程模型,使得开发者可以快速地将应用程序集成到消息中间件中。 Spring Cloud Stream 的核心是 Spring Integration,它是一个用于构建消息驱动的应用程序的框架。Spring Integration 提供了一种基于管道和过滤器的编程模型,使得开发者可以通过简单的组件配置来构建复杂的消息处理流程。 Spring Cloud Stream 通过定义一些接口和注解,使得开发者可以快速地将应用程序集成到消息中间件中。它支持多种消息中间件,包括 RabbitMQ、Kafka、ActiveMQ、Amazon Kinesis 等。 Spring Cloud Stream 的源码主要分为以下几个部分: 1. Spring Cloud Stream 核心模块 核心模块包括了 Spring Cloud Stream 的核心接口和注解定义,以及消息通道的实现。其中,核心接口包括了 Binder、Binding、ChannelResolver、MessageChannel、Source、Sink 等。Binder 是 Spring Cloud Stream 的核心组件,它负责将应用程序与消息中间件进行连接。 2. 消息中间件 Binder 实现 消息中间件 Binder 实现包括了各种消息中间件的 Binder 实现。每个 Binder 实现都需要实现 Binder 接口,并提供与消息中间件进行交互的实现。 3. 核心 Binder 实现 核心 Binder 实现包括了 RabbitMQ、Kafka 和 Redis 的 Binder 实现。它们是 Spring Cloud Stream 的默认 Binder 实现,提供了与这些消息中间件的交互实现。 4. 核心 Starter 模块 核心 Starter 模块包括了 Spring Cloud Stream 的核心 Starter,以及各个 Binder 的 Starter。Starter 包含了一些必要的依赖和自动配置,使得开发者可以快速地集成 Spring Cloud Stream 到自己的应用程序中。 5. Spring Cloud Stream 测试模块 测试模块包括了 Spring Cloud Stream 的测试框架,以及各个 Binder 的测试框架。它们提供了一些工具类和注解,使得开发者可以方便地进行集成测试和单元测试。 总的来说,Spring Cloud Stream 的源码比较庞大,但是它的核心思想比较简单,就是将应用程序与消息中间件进行解耦,让开发者能够更加专注于业务逻辑的实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值