SpringCloud入门实战(十一)-Spring Cloud Stream消息驱动概述

news2024/11/25 10:54:36

📝 学技术、更要掌握学习的方法,一起学习,让进步发生
👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。
💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。
💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。
❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。

👉🏻 👉🏻 👉🏻 SpringCloud 入门实战系列不迷路 👈🏻 👈🏻👈🏻:

  • SpringCloud 入门实战(一)什么是SpringCloud?
  • SpringCloud 入门实战(二)-SpringCloud项目搭建
  • SpringCloud 入门实战(三)-Eureka注册中心集成
  • SpringCloud入门 实战(四)-Zookeeper、Consul注册中心集成
  • SpringCloud入门实战(五)-Ribbon负载均衡集成
  • SpringCloud入门实战(六)-OpenFeign服务调用集成
  • SpringCloud入门实战(七)-Hystrix入门简介
  • SpringCloud入门实战(七)-Hystrix服务降级
  • SpringCloud入门实战(七)-Hystrix服务熔断
  • SpringCloud入门实战(七)-Hystrix服务限流
  • SpringCloud入门实战(七)-Hystrix Dashboard图形化监控
  • SpringCloud入门实战(八)-Gateway服务网关集成
  • SpringCloud入门实战(九)- Config配置中心
  • SpringCloud入门实战(十)- SpringCloud Bus消息总线
  • SpringCloud入门实战(十一)- SpringCloud Stream 消息驱动

文章目录

  • 一、Spring Cloud Stream概述
    • 1、Spring Cloud Stream是什么?
    • 2、Spring Cloud Stream可以帮我们解决什么?
    • 3、Spring Cloud Stream标准流程
  • 二、主要概念
    • 1、Spring Cloud Stream的应用模型
    • 2、Binder抽象
    • 3、持续的发布 - 订阅支持
    • 4、消费者群体支持(消费者组)
    • 5、分区支持
    • 6、编程模型
  • 三、项目集成

一、Spring Cloud Stream概述

1、Spring Cloud Stream是什么?

Spring Cloud Stream官网:SpringCloud Stream官网

Spring Cloud Stream是构建消息驱动的微服务应用程序的框架。Spring Cloud Stream基于Spring Boot建立独立的生产级Spring应用程序,并使用Spring Integration提供与消息代理的连接。SpringCloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,引用了发布-订阅消费组分区的三个核心概念。

2、Spring Cloud Stream可以帮我们解决什么?

当微服务系统越来越复杂,以及调用的系统之间可能采用不同的中间件处理时,都会面临中间件技术切换、维护、开发等等复杂的工作。例如RabbitMQ 和 Kafka 两个消息中间件在架构上不同。例如 RabbitMQ 有 exchange,Kafka 有 Topic 和 Partitions分区,所以二者不能够直接互通。

而Spring Cloud Stream通过定义绑定器 Binder 作为中间层,向应用程序暴露统一的 channel通道实现了应用程序与消息中间件细节之间的隔离。屏蔽了各种MQ的底层差异而达到对MQ的统一管理,让我们不再关注具体的MQ的细节,只需要通过交互SpringCloud Stream,就能操作各种MQ,降低切换、维护、开发工作

小结:Spring Cloud Stream可以帮我们屏蔽底层消息中间件的差异,降低切换维护成本,统一消息的编程模型(声明和绑定频道),另外同Spring Cloud Bus一样Stream目前仅支持RabbitMQ、Kafka。

3、Spring Cloud Stream标准流程

在这里插入图片描述

  • Source/Sink:Source 输入消息,Sink 输出消息
  • Channel:通道,是队列 Queue 的一种抽象,在消息通讯系统中就是实现存储和转发的媒介,通过Channel 对队列进行配置;
  • Binder:很方便的 连接中间件,屏蔽 MQ 之间的差异

二、主要概念

Spring Cloud Stream提供了一些简化了消息驱动的微服务应用程序编写的抽象和原语:

  • Spring Cloud Stream的应用模型
  • Binder抽象
  • 持续的发布 - 订阅支持
  • 消费者群体支持
  • 分区支持
  • 一个可插拔的Binder API

1、Spring Cloud Stream的应用模型

一个Spring Cloud Stream应用程序由一个中间件中立的核心组成。该应用程序通过Spring Cloud Stream注入到其中的输入和输出通道与外界进行通信。应用程序通过 inputs 或者 outputs 来与 SpringCloud Stream 中的 binder(绑定器) 对象交互。通过我们配置来 binding(绑定),而SpringCloud Stream 的 binder 对象负责与消息中间件交互。

应用模型各组成应用模型中各组成说明
Middleware中间件,目前只支持 RabbitMQ 和 Kafka
BinderBinder 是应用于消息中间件之间的封装,可以动态的改变消息类型
@Input注解标识输入通道,通过改输入通道接收到的消息进入应用程序
@Output注解标识输出通道,发布的消息通过该通道离开应用程序
@StreamListener监听队列,用于消费者队列的消息接收
@EnableBinding指信道 channel 和 exchange 绑定在一起

2、Binder抽象

Binder 是应用于消息中间件之间的封装,目前实现了 RabbitMQ 和 Kafka 的Binder。

Spring Cloud Stream使用Spring Boot进行配置,Binder抽象使得Spring Cloud Stream应用程序可以灵活地连接到中间件。例如,部署者可以在运行时动态地选择通道连接的目的地(例如,Kafka主题或RabbitMQ交换)。可以通过外部配置属性和Spring Boot(包括应用程序参数,环境变量和application.yml或application.properties文件)支持的任何形式提供此类配置。

Spring Cloud Stream自动检测并使用类路径中找到的binder。您可以使用相同的代码轻松使用不同类型的中间件:在构建时只包含不同的绑定器。对于更复杂的用例,您还可以在应用程序中打包多个绑定器,并在运行时选择绑定器,甚至是否为不同的通道使用不同的绑定器。

3、持续的发布 - 订阅支持

应用之间的通信遵循发布订阅模式,其中通过共享主题广播数据。

发布订阅通信模型降低了生产者和消费者的复杂性,并允许将新应用程序添加到拓扑中,而不会中断现有流。例如,在平均计算应用程序的下游,您可以添加一个计算显示和监视的最高温度值的应用程序。然后,您可以添加另一个解释相同的故障检测平均流程的应用程序。通过共享主题而不是点对点队列进行所有通信可以减少微服务之间的耦合。

4、消费者群体支持(消费者组)

Spring Cloud Stream消费者组与Kafka消费者组相似:
每个消费者绑定可以使用spring.cloud.stream.bindings..group属性来指定组名称。对于下图所示的消费者,此属性将设置为spring.cloud.stream.bindings..group=hdfsWrite或spring.cloud.stream.bindings..group=average。
在这里插入图片描述
订阅给定目标的所有组都会收到已发布数据的副本,但每个组中只有一个成员从该目的地接收给定的消息。默认情况下,当未指定组时,Spring Cloud Stream将应用程序分配给与所有其他消费者组发布 - 订阅关系的匿名独立单个成员消费者组。

持久化:符合Spring Cloud Stream的有意义的应用模式,消费者群体订阅是持久的。也就是说,绑定实现确保组预订是持久的,一旦已经创建了一个组的至少一个订阅,即使组中的所有应用程序都被停止,组也将接收消息。

通常,当将应用绑定到给定目的地时,最好始终指定消费者组。在扩展Spring Cloud Stream应用程序时,必须为每个输入绑定指定一个使用者组。这样可以防止应用程序的实例收到重复的消息。

匿名订阅本质上是不耐用的。对于某些binder实现(例如RabbitMQ),可以具有非持久组的订阅。

5、分区支持

Spring Cloud Stream提供对给定应用程序的多个实例之间的分区数据的支持。在分区场景中,物理通信介质(例如,代理主题)被视为被构造成多个分区。一个或多个生产者应用程序实例将数据发送到多个消费者应用程序实例,并确保由共同特征标识的数据由相同的消费者实例处理。

Spring Cloud Stream提供了统一方式实现分区处理用例的通用抽象。因此,无论代理本身是否自然分区(例如Kafka)(例如RabbitMQ),分区可以被使用。

6、编程模型

Spring Cloud Stream提供了许多预定义的注释,用于声明绑定的输入和输出通道,以及如何收听频道。

  • 自定义频道名称
    使用@Input和@Output注释,您可以指定频道的自定义频道名称
  • 预定义接口:
    为了方便寻址最常见的用例,涉及输入通道,输出通道或两者,Spring Cloud Stream提供了开箱即用的三个预定义接口:Source(出站通道),Sink(入站通道)和Processor

简单理解从Stream发布消息就是输出,接受消息就是输入。

三、项目集成

项目集成详情参看:Spring Cloud Stream消息驱动项目集成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/716312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚焦云原生安全攻防|构建纵深防御的运行时威胁检测体系

7月2日,诸子云北京分会研讨会活动—网络安全攻防对抗在北京成功举办。 作为国内云原生安全领导厂商,安全狗也参与此次活动。 厦门服云信息科技有限公司(品牌名:安全狗)成立于2013年,致力于提供云安全、&…

Scenario Runner (CARLA)

1. How to run scenarios —Type 2. How to run scenarios —Functionalities

系统提权与数据窃取

系统提权与数据窃取 一、后渗透二、后渗透的技术2.1、提权2.2、横向移动2.3、持久化2.4、数据窃取2.5、漏洞利用 三、meterpreter后渗透3.1、靶机权限提升3.1.1、windows内核/服务漏洞3.1.2、bypassUAC3.1.2.1、bypassuac 进程注入3.1.2.2、bypassuac_injection 内存注入3.1.2.…

Android Studio实现内容丰富的安卓医院医生招聘平台

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号120 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看公告 3.查…

软件设计师(九)数据库技术基础

数据库技术是研究数据库的结构、存储、设计、管理和应用的一门软件学科 一、基本概念 1、数据库和数据库系统 数据库系统(DataBase System,DBS)是一个采用了数据库技术,有组织地、动态地存储大量数据,方便多用户访问…

公众号授权登录h5

公众号授权登录h5 . 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的。包括语音识别、机器翻译等从基础到实战都有,很详细,分享给大家。大家及时保存,说不定啥时候就没了。 . 步骤 …

认识JavaScript

大家好,今天我们来认识一下JavaScript相关内容 目录 🐷1.JavaScript是什么🐷2.JavaScript发展史🐷3.JavaScript 和 HTML 和 CSS 之间的关系🐷4.JavaScript 运行过程🐷5.JavaScript 的组成🐷6.用JavaScript写…

JavaScript 实现一键复制(id,账号)

文章目录 HTML准备JavaScript 逻辑css 在前端有很多的时候需要一键复制账号,密码等,比如QQ的复制QQ账号,一些程序应用的个人信息页,都会有一键复制这个功能,下面给大家分享一下一键复制的实现方法 HTML准备 先提前准备…

【Linux修炼】开发工具使用

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

计算机丢失msvcr110.dll是什么意思?那个修复方法更简单

Windows系统的电脑运行一段时间,总是不可避免出现一些系统报错,比如在运行游戏或游戏的时候,报错提示“计算机丢失msvcr110.dll”,“找不到msvcr110.dll”是什么意思呢?我是运行photoshop的时候报错的,场景…

Paddle:SSLD 知识蒸馏实战

SSLD 知识蒸馏实战 论文:https://arxiv.org/abs/2103.05959 1. 算法介绍 1.1 简介 PaddleClas 融合已有的知识蒸馏方法 [2,3],提供了一种简单的半监督标签知识蒸馏方案(SSLD,Simple Semi-supervised Label Distillation),基于 I…

如何解释商业智能BI?商业智能BI未来的发展趋势?

商业智能BI能够成为当前商业世界中备受企业欢迎的数据类技术解决方案其实是有原因的,早在1958年,IBM研究员就将商业智能BI的早期形态定义为:“对事物相互关系的一种理解能力,并依靠这种能力去指导决策,以达到预期的目标…

【Python】正则表达式匹配大部分Url

正则表达式: r’(\w://)?(\w)(.\w).(\w)(/\w)(.\w)?(?(\w\w)(&\w\w))?’ 解释:

World macheine和Houdini这两个软件在游戏地形制作中如何选择?

本文仅针对“World macheine和Houdini这两个软件在游戏地形制作中如何选择?”做出回答。 简单介绍 World Machine: World Machine是一款专业的地形生成软件。它提供了一套强大的工具和节点系统,用于创建高度图和地形。World Machine可以帮助…

opencv使用applyColorMap()函数,可以将灰度图或彩色图转换成自定义的彩色图,或opencv提供的20多种色彩值

文章目录 1、applyColorMap()函数的使用:(1)函数原型:void applyColorMap(InputArray src, OutputArray dst, int colormap)void applyColorMap(InputArray src, OutputArray dst, InputArray userColor) (2&#xff0…

PMP证书为什么可以不用考试就可以获得CSPM二级证书?

一、PMP证书介绍 PMP是指项目管理专业人士(Project Management Professional),是国际上公认的项目管理领域的权威认证。PMP认证由美国项目管理协会(PMI)颁发,是全球范围内最具权威性、最受认可的项目管理专…

Jmeter使用之:怎么编写扩展函数(一)

目录 前言: 1、首先编写我们的java类,如具体代码如下: 2、使用eclipse把java导出成jar包,如timetool.jar。 3、Jmeter 测试计划底部的library找到timetool.jar,导入进去。 4、在Jmeter测试计划下新建线程组&#…

咨询第三方软件测试机构报价时,软件企业应该准备什么?

随着软件行业的快速发展,软件企业也面临着越来越大的市场竞争压力。为了确保软件产品的质量和稳定性,许多企业开始选择外包软件测试服务。然而,在咨询第三方软件测试机构报价之前,软件企业需要做好一些准备工作,以获得…

AI很渴:chatGPT交流一次=喝掉一瓶水,GPT3训练=填满核反应堆

流行的大型语言模型(LLM),如OpenAI的ChatGPT和Google的Bard,耗能巨大,需要庞大的服务器农场提供足够的数据来训练这些强大的程序。对这些数据中心进行冷却也使得AI聊天机器人对水的需求量极大。新的研究表明&#xff0…

小白到运维工程师自学之路 第四十五集 (生产级Redis Cluster部署)

一、概述 Redis Cluster是Redis数据库的一种分布式解决方案,用于在多个节点上分布和 管理数据。它通过将数据分片存储在不同的节点上,实现数据的分布式存储和处理。 Redis Cluster采用主从复制的方式来保证数据的高可用性和容错性,每个主节…