秃头大牛一文竟然就把SpringCloudStream(SCS)给讲明白了?
SpringCloudStream概述
Spring Cloud对Spring Cloud Stream(简称SCS)的定位是用于构建高度可扩展的基于事件驱动的微服务,其目的是简化消息在Spring Cloud应用程序中的开发。同时SCS能够提供一套灵活可扩展的编程模型,在Spring的基础上,支持发布/订阅模型、消费者分组、数据分片等。使用SCS能使微服务基于消息驱动的开发模式更加简单透明。
SCS的架构
SCS可以简单地理解为是对第三方消息中间件的一个概念封装,开发人员可以将关注点从消息中间件的特性配置转移到对消息的配置。
下面是一个简单的架构图。
- Middleware:消息中间件,如RabbitMQ、Kafka、RocketMQ等。
- Binder:可以认为是适配器,用来将Stream与中间件连接起来,不同的Binder对应不同的中间件,需要我们配置。
- Application:由Stream封装的消息机制,很少自定义开发。
- Inputs:输入,可以自定义开发。
- Outputs:输出,可以自定义开发。
如果将SCS架构从消息层面做进一步细化,则可以分为三个模块,如下图所示。
SCS的核心模块
- Source
当服务发布消息前的前置业务完成后会通过Source将消息发布出去。Source是一个Spring注解接口,它可以将代表消息主体的POJO对象发布到Channel中,发布之前会把该消息对象序列化(默认使用JSON)。
- Channel
Channel(消息通道)是消息队列的进一步抽象,它会保存Producer发布的或者Consumer接收的消息。Channel名称一般与目标队列名称相关联。然而,消息队列的名称不会直接在代码中暴露,相反Channel名称会被用在代码中,所以只能在配置文件中配置,为Channel选取正确的消息队列进行读和写,而不是在代码中体现。
- Binder
Binder是SCS框架的一部分,它由SCS实现,用来与特殊的消息平台交互。我们可以在不暴露特殊消息平台的类库和API的情况下实现对消息的发布和消费。通过后面的源码介绍,你将会看到它的强大之处。
- Sink
在SCS中,当从消息队列接收到一条消息后,需要Sink。Sink能监听进入Channel中的消息并将消息反序列化成一个POJO对象。之后,消息就能给业务逻辑使用了。
SCS的接入
我们以RabbitMQ为例(消息队列的环境搭建这里不做过多的介绍,本章以Stream为主),新建两个Maven工程,分别作为消息消费者(Server-Receiver)和消息生产者(Server-Sender),在两个项目中引入Stream依赖和Stream对RabbitMQ的依赖,再为生产者单独添加Web依赖,以便能够通过HTTP调用发送信息。
1.接入Maven依赖
2.消费者启动主类Server-Receiver
注意:也 可 以 自 定 义 Sink 接口 , 使 用@EnableBinding(SinkDemo.class)的形式。下面是实现代码,自定义信道的名称为SinkDemo,Stream框架会创建出名为SinkDemo的Channel:
3.添加消费者配置文件application.yml
具体配置详解说明如下(spring.cloud.stream为前缀):
● bindings配置
○ input :表 示 channelName , 它 是 启 动 类 中@EnableBinding(Sink.class)注解中配置的Sink接口,该接口中默认定义了channelName,当然我们也可以自己写Sink接口。
○ destination:消息中间件的Topic。
○ binder:当前bindings绑定的对应的适配器,该实例表示适配RabbitMQ,名称默认为defaultRabbit,可以自定义,接着需要配置该名称对应的类型、环境信息等。
● binders配置
○ defaultRabbit :binder 适 配 器 名 称 , 和spring.cloud.stream.bindings.input.binder值一样。
○ environment:表示当前binder对应的配置信息。
4.生产者Server-Sender实现
为SenderApplication启动类添加@EnableBinding注解,实现代码如下:
自定义SenderSource接口,以org.springframework.cloud.stream.messaging.Source源码为参考将Channel的名称改成和消费者的Sink的Channel名称一样。
5.编写控制器,通过HTTP发送消息
6.添加生产者application.yml配置,配置方式和消费者的配置方式一样
7.启动消费者和生产者
首先启动消费者,通过查看日志我们看到程序中声明了一个名称为demotopic.anonymous.88A97a5vQ9Ox07GnNBlKYQ的队列(SCS为我们建的临时队列名称),并且绑定了mytopic主题,创建了一个连上消息队列的连接,下面是部分关键日志输出:
然后启动生产者Server-Sender,在启动日志中我们也看到应用创建了到对应的消息队列的连接。接下来我们通过HTTP发送信息:
在服务消费者的日志中,监听到了对应的消息:
本文给大家讲解的内容是MOM异步通信,Spring Cloud Stream概述
- 下篇文章给大家讲解的内容是MOM异步通信,Stream源码解析
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
秃头大牛一文竟然就把SpringCloudStream(SCS)给讲明白了?相关推荐
- SpringBoot系列(三)----某程序猿竟然因为“日志”问题一夜秃头
某程序猿竟然因为"日志"问题一夜秃头.这是道德的沦丧还是因为什么.... 在一个夜深人静的凌晨两点.一个兢兢业业的程序猿–小张,正在面对着电脑敲着键盘.他正在开发一个公司发不下来的 ...
- 掉光的头发竟然又长出来了!这瓶泰国变态生姜水,连秃头都能救一下!
程序员大咖 点击右侧关注,免费进阶高级! ©文丨 程序员大咖 头可断,血可流,发型不能乱, 头发,人的第二张脸, 直接影响一个人的气质和颜值, 飘逸的乌黑秀发, 向来是男神女神的标配. 但若是头发日渐 ...
- 秃头青年25岁躺平,30岁开始醒悟,还来得及奋斗吗
以前上学的时候老听人说程序员容易秃头,当时我没办法理解,不就是熬夜嘛,我天天通宵LOL不也一头秀发.毕业后我顺利进入了一家小公司写(chao)代码,然后我才知道,是我太天真了,这不是熬夜的事,一天天的 ...
- B 站 Up 主自制秃头生成器,独秃头不如众秃头?
要说最近哪部剧最红,我说是<隐秘的角落>没人有意见吧? 看了这部片子,全国观众除了被男主张东升提醒爬山有风险之外,片中的另一个场景也颇让人印象深刻,容易让人产生共鸣,那就是张东升看到自己二 ...
- B 站 Up主自制秃头生成器,圆你一个秃头梦?
本文经授权转载自公众号CSDN 公众号ID:CSDNnews 要说最近哪部剧最红,我说是<隐秘的角落>没人有意见吧? 看了这部片子,全国观众除了被男主张东升提醒爬山有风险之外,片中的另一个 ...
- 【报告分享】2021年中国“夜猫”人群洞察报告:月亮不睡我不睡,我是秃头小宝贝.pdf(附下载链接)...
超5亿国人习惯在24点之后入睡,占中国人口的35.%,你就是其中一员! 大家好,我是文文(微信:sscbg2020),今天给大家分享Mob研究院于2021年4月份发布的报告<2021年中国&qu ...
- B 站 Up 主自制秃头生成器,圆你秃头梦想可好?
要说最近哪部剧最红,我说是<隐秘的角落>没人有意见吧? 看了这部片子,全国观众除了被男主张东升提醒爬山有风险之外,片中的另一个场景也颇让人印象深刻,容易让人产生共鸣,那就是张东升看到自己二 ...
- 学计算机编程会秃头吗,编程真的容易导致秃顶么?
原标题:编程真的容易导致秃顶么? 昨天,和一程序员基友吃饭 想拍一张照片发朋友圈 结果被极力阻(威)拦(胁) "你拍嘛,拍了我就把手机给你砸了" 有这么可怕的么?我这么可爱 无耻的 ...
- 【秃头系列】-【本科生毕设论文格式Word】自动生成论文多级标题并排版正文
文章目录 01 - 论文多级标题及正文 1.1 - 多级标题 1.2 - 正文 02 - 如何自动生成 2.1 - 格式约定 2.2 - 设置多级标题 2.2.1 - 设置标题样式 2.2.2 - 设 ...
最新文章
- CV00-03-CV基本操作2
- 求自定类型元素序列的中位数
- 尝鲜RHEV 3.0——概念篇(附RHEV3.0下载)
- python3(十)pickle库
- python 逐行读取csv_在R中如何逐行读取CSV文件并将内容识别为正确的数据类型?...
- 502无法解析服务器标头_编写下载服务器。 第三部分:标头:内容长度和范围...
- Big Sur恢复Catalina ? macOS Big Sur降级的三种方法 !
- 重用之前应仔细分析问题---------用错轮子有感
- stats | 广义线性模型(二)——泊松回归
- java aop设计_Spring4.x基础配置(三):Spring AOP
- java web项目_一个完整JavaWeb项目开发总结
- 史上最详细解释接口自动化测试中cookie、session和token的区别【多测师_王sir】
- 3dmax导出fbx模型壳材质贴图丢失
- matlab打开jpg文件怎么打开,Matlab读取图片、显示和保存图像的详细教程
- 计算机中文件夹属性有哪些,文件和文件夹属性
- vue3.0父子组件警告Extraneous non-emits event listeners (closeSetDialog) were passed to component but could
- PHP数字球,球体的计算
- Codeforces Round #620 (Div. 2)(D. Shortest and Longest LIS)(O(n log n)的最长上升子序列或者贪心)
- linux可以挂载nas盘吗_linux可以挂载nas盘吗
- (附源码)ssm基于jsp高校选课系统 毕业设计 291627