全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

消息驱动Stream解决了什么问题?

发布时间:2023-10-12 21:21:38
发布人:xqq

一、消息驱动Stream解决的问题

消息驱动Stream解决了开发人员无感知的使用消息中间件的问题,因为Stream对消息中间件的进一步封装,可以做到代码层面对中间件的无感知,甚至于动态的切换中间件,使得微服务开发的高度解耦,服务可以关注更多自己的业务流程。

二、消息驱动Stream是什么

Spring Cloud Stream是一个构建消息驱动的微服务框架,屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型。应用程序通过inputs或者outputs来与Spring Cloud Stream中binder对象交互,通过配置的binding绑定,其中Spring Cloud Stream的binder对象负责与消息中间件交互,通过使用Spring Integration来连接消息代理中间件以实现消息事件驱动。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的三个核心概念,目前仅支持RabbitMQ、Kafka。

三、消息驱动Stream的核心概念

1、绑定器

Binder 绑定器是Spring Cloud Stream中一个非常重要的概念。在没有绑定器这个概念的情况下,我们的Spring Boot应用要直接与消息中间件进行信息交互的时候,由于各消息中间件构建的初衷不同,它们的实现细节上会有较大的差异性,这使得我们实现的消息交互逻辑就会非常笨重,因为对具体的中间件实现细节有太重的依赖,当中间件有较大的变动升级、或是更换中间件的时候,我们就需要付出非常大的代价来实施。

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

Spring Cloud Stream支持各种binder实现,通过配置把应用和spring cloud stream 的 binder 绑定在一起,之后我们只需要修改 binder 的配置来达到动态修改较好ic、exchange、type等一系列信息而不需要修改一行代码。

2、发布/订阅模型

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

四、Stream 消息生产者

创建消息生产者模块,引入依赖 starter-stream-rabbit;编写配置,定义 binder,和 bingings;定义消息发送业务类。添加 @EnableBinding(Source.class),注入MessageChannel output,完成消息发送;编写启动类,测试。

五、Stream 消息消费者

创建消息消费者模块,引入依赖 starter-stream-rabbit;编写配置,定义 binder,和 bingings;定义消息接收业务类。添加@EnableBinding(Sink.class),使用@StreamListener(Sink.INPUT),完成消息接收;编写启动类,测试。

延伸阅读1:Stream 组件

Binder:连接中间件,屏蔽差异Channel:是队列Queue的一种抽象,在消息通讯系统中就是实现存储和转发的媒介,通过Channel对队列进行配置Source和Sink:从Stream发布消息就是输出,接受消息就是输入@Input:输入通道,通过该输入通道接收到的消息进入应用程序@Output:输出通道,发布的消息将通过该通道离开应用程序@StreamListener:监听队列,用于消费者的队列的消息接收@EnableBinding:信道channel和exchange绑定在一起
#it技术干货

相关文章

linux有什么优点?

linux有什么优点?

2023-10-12
人工智能是什么?

人工智能是什么?

2023-10-12
Python中__init__和__new__的区别是什么?

Python中__init__和__new__的区别是什么?

2023-10-12
为什么说WASM是Web的未来?

为什么说WASM是Web的未来?

2023-10-12

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取