Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“

news2024/12/29 9:01:58

目录:

    • 一、"消息服务" 概述 :
      • 1.1 为什么要使用 "消息服务" ( 消息中间件 ) ?
        • ① 异步处理
        • ② 应用解耦
        • ③ 流量削峰
        • ④ 分布式事务管理
      • 1.2 常用 "消息中间件" 介绍 :
        • ActiveMQ ( 广泛应用于中小型企业 )
        • RabbitMQ ( 没有特别要求的场景下,常用"RabbitMQ中间件" )
        • Kafka ( "大数据业务" 可使用该中间件 )
        • RocketMQ ( "大数据业务" 可使用该中间件 )
        • 实际开发中,选哪个中间件?
    • 二、RabbitMQ 消息中间件
      • 2.1 RabbitMQ "简介"
      • 2.2 RabbitMQ "工作模式介绍"
        • ① Work queues 工作模式 ( "工作队列" 模式 ) - ( 适用于"较为繁重" , 可以进行 "拆分处理" 的 业务 )
        • ② Publish/Subscribe 工作模式 ( "发布订阅" 模式 ) - ( 适用于 "相同业务功能处理" 的 场合 )
        • ③ Routing 工作模式 ( "路由"模式 ) - ( 适用于 "不同类型消息"分类处理的 场合 )
        • ④ Topics工作模式 ( "通配符模式"模式 ) - ( 适用于 根据不同需求 "动态传递处理业务" 的场合 )
        • ⑤ RPC工作模式 - ( 适用于 "分布式"架构的 "消息传递业务" / 适用于 "远程服务调用" 的业务场合 )
        • ⑥ Headers工作模式
        • ⑦ 总结
    • 三、Erlang + RabbitMQ "安装"以及 "整合环境搭建" :
      • 3.1 下载并安装 Erlang 和 RabbitMQ + RabbitMQ"可视化效果展示"
      • 3.2 Spring Boot "整合RabbitMQ" 环境搭建 :
        • ① 创建Spring Boot 项目
        • ② 配置文件中添加 "配置信息"

在这里插入图片描述

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!

该文章参考学习教材为:
《Spring Boot企业级开发教程》 黑马程序员 / 编著
文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章

文章用于本人学习使用 , 同时希望能帮助大家。
欢迎大家点赞👍 收藏⭐ 关注💖哦!!!

(侵权可联系我,进行删除,如果雷同,纯属巧合)


  • 实际项目开发中,有时候 需要与其他系统进行 集成完成相关业务功能,这种情况 最原始做法程序内部相互调用除此之外,还可以使用 “消息服务中间件” 进行业务处理,使用消息服务中间件 处理业务能够提升系统异步通信扩展解耦能力Spring Boot消息服务管理提供了非常好的支持。下面将针对 Spring Boot 消息服务原理整合使用 进行详细讲解

一、“消息服务” 概述 :

1.1 为什么要使用 “消息服务” ( 消息中间件 ) ?

  • 多数应用尤其是 分布式系统中,消息服务不可或缺的重要部分,它使用起来比较简单同时解决了不少难题,例如 异步处理应用解耦流量削锋分布式事务管理等,使用消息服务可以实现一个高性能高可用高扩展的系统。下面我们将通过实际开发中若干场景来分析和说明 为什么要使用消息服务,以及使用消息服务的好处

    ( 下面将通过 实际的场景说明为什么要使用 “消息服务”

① 异步处理
  • 场景说明 : 用户注册后系统 需要 将信息写入数据库发送 注册邮件注册短信通知。下面我们使用图示的方式直观展示上述场景不同处理方式如下图所示 :

在这里插入图片描述

在上图中,针对上述 注册业务场景需求处理方式有3种如下所示 :

(1) 串行处理方式 : 用户发送注册请求后服务器先将注册信息写入数据库依次发送注册邮件短信消息服务器只有
在"
消息处理完毕
"后 才会将处理结果返回客户端 。这种 串行处理消息方式非常耗时用户体验不友好

(2) 并行处理方式 : 用户发送注册请求后注册信息写入数据库同时发送注册邮件短信最后返回给客户端,这种 并行处理的方式在一定程度上提高了后台业务处理效率,但如果遇到较为耗时业务处理仍然显得不够完善

(3) 消息服务处理方式 : 可以在 业务中嵌入消息服务 ( 消息中间件 )进行 业务处理,这种方式先将注册信息写入数据库,
极短的时间注册信息写入消息队列即可 返回响应信息此时前端业务不需要理会不相干后台业务处理,而发送注册邮件短信的业务自动读取消息队列 中的 相关消息进行后续业务处理

② 应用解耦
  • 场景说明 : 用户下单后订单服务需要通知库存服务。下面将使用图示的方式直观展示上述需求不同处理方式,如下图所示

    在这里插入图片描述

    上图中如果使用 传统方式处理订单业务用户下单后,订单服务会 直接调用库存服务接口进行库存更新,这种方式有一个很大的问题是 : 一旦库存系统出现异常订单服务失败导致订单丢失

    如果使用 消息服务模式 ( 消息中间件 ),订单服务下订单消息快速写入消息队列库存服务监听读取到订单 ,从而修改库存。相较于传统方式消息服务模式显得更加高效可靠

③ 流量削峰
  • 场景说明 : 秒杀活动流量削峰的一种应用场景由于服务器处理资源能力有限,因此出现 峰值很容易造成服务器宕机用户无法访问的情况。为了 解决这个问题,通常会采用消息队列 缓冲瞬时高峰流量请求进行分层过滤从而过滤掉一些请求如下图所示

    在这里插入图片描述

    针对上述秒杀业务场景需求如果专门增设服务器应对秒杀活动期间 请求瞬时高峰的话,在非秒杀活动期间,这些多余的服务器和配置显得有些浪费如果不进行有效处理的话秒杀活动瞬时高峰流量请求有可能压垮服务,因此,在秒杀活动中加入 消息服务较为理想的解决方案。通过在应用前端加入消息服务将所有请求写入消息队列并限定一定的值多余的请求直接返回秒杀失败秒杀服务会根据秒杀规则消息队列中读取并处理有限的秒杀请求。

④ 分布式事务管理
  • 场景说明 : 在分布式系统中,分布式事务开发中必须要面对技术难题怎样保证分布式系统请求业务处理数据一致性通常是要重点考虑的问题。针对这种分布式事务管理情况,目前 较为可靠处理方式基于消息队列二次提交,在失败的情况可以进行多次尝试,或者基于队列数据进行回滚操作。因此,在 分布式系统加入消息服务 是一个 既能保证性能不变又能保证业务一致性的方案

  • 针对这种分布式事务处理需求,下面将以 图示的方式展示使用消息服务处理机制如下图所示

    在这里插入图片描述

    针对上述分布式事务管理场景需求如果使用传统方式 在订单系统中 写入订单支付成功信息后,再 远程调用库存系统进行库存更新一旦库存系统异常 ,很有可能 导致库存更新失败订单支付成功 的情况, 从而导致数据不一致

    针对这种分布式系统的事务管理,通常会在 分布式系统之间加入消息服务进行管理。在上图中,订单支付成功后写入消息表;然后定时扫描消息表消息写入到消息队列中,库存系统会立即读取消息队列中的消息进行库存更新,同时添加消息处理状态;接着,库存系统消息队列写入库存处理结果订单系统会立即读取消息队列中的库存处理状态如果库存服务处理失败订单服务还会重复扫描并发送消息表中的消息,让 库存系统进行最终一致性库存更新如果处理成功订单服务 直接删除消息表数据,并写入到历史消息表

1.2 常用 “消息中间件” 介绍 :

  • 消息队列中间件 ( 简称:消息中间件 ) 是指利用高效可靠消息传递机制进行与平台无关数据交流,并基于 数据通信 来进行 分布式系统的集成

    常见消息中间件有 : ActiveMQRabbitMQKafkaRocketMQ 等。目前市面上的消息中间件各有侧重点,选择适合自己能够扬长避短无疑是最好的选择

ActiveMQ ( 广泛应用于中小型企业 )
  • ActiveMQApache 公司出品的、采用 Java 语言编写的、完全基于 JMS 规范 ( java Message Service )的、面向消息的中间件,它为应用程序提供高效、可扩展的、稳定的、安全的企业级消息通信。ActiveMQ 丰富的 API多种集群构建模式使得它成为业界老牌的消息中间件,广泛的**应用于中小型企业中。相较于后续出现的 RabbitMQRocketMQKafka 等消息中间件来说,ActiveMQ 性能相对较弱,在如今的高并发**、大数据处理的场景下显得力不从心经常会出现一些问题例如消息延迟堆积堵塞
RabbitMQ ( 没有特别要求的场景下,常用"RabbitMQ中间件" )
  • RabbitMQ 是使用 Erlang 语言开发的**开源消息队列系统,基于 AMQP协议 ( Advanced Message Queuing Protocol ) 实现。AMQP 是为 应对大规模并发活动提供统一消息服务应用层标准高级消息队列协议,专门为面向消息中间件设计,该协议更多用在企业系统内,对 数据一致性稳定性可靠性要求很高的 “场景”,对性能吞吐量**的 要求还在其次。正是 基于 AMQP协议各种优势性能,使得 RabbitMQ 消息中间件应用开发中越来越受欢迎
Kafka ( “大数据业务” 可使用该中间件 )
  • Kafka 是由 Apache 软件基金会开发的一个 开源流处理平台,它是一种 高吞吐量分布式发布订阅消息系统,采用 ScalaJava 语言编写,提供了快速可扩展的、分布式的、分区的和可复制日志订阅服务,其主要特点是追求高吞吐量,适用于产生大量数据的互联网服务的数据
    收集业务。
RocketMQ ( “大数据业务” 可使用该中间件 )
  • RocketMQ阿里巴巴公司开源产品,目前也是 Apache 公司顶级项目,使用 纯Java 开发,具有 高吞吐量高可用适合大规模分布式系统应用的特点。RocketMQ思路起源于 Kafka,对消息的可靠传输以及事务性做了优化,目前在阿里巴巴中被广泛应用于 交易充值流计算消息推送日志流式处理场景 ,不过 维护上稍微麻烦
实际开发中,选哪个中间件?
  • 实际项目技术选型 时,

    没有特别要求场景,通常会选择使用 RabbitMQ作为消息中间件

    如果 针对的是大数据业务,推荐使用 Kafka或者是 RocketMQ 作为消息中间件

二、RabbitMQ 消息中间件

2.1 RabbitMQ “简介”

  • RabbitMQ 是基于 AMQP 协议轻量级可靠可伸缩可移植消息代理Spring 使用RabbitMQ 通过 AMQP 协议进行 通信;在 Spring Boot 中对 RabbitMQ 进行了 集成管理。在所有的消息服务中,消息中间件都会作为一个第三方消息代理接收发布者发布的消息推送消息消费者不同消息中间件内部转换消息细节不同

  • RabbitMQ消息代理过程下图所示

在这里插入图片描述

(1) 消息发布者 ( Publisher,简称P )向 RabbitMQ 代理 ( Broker ) 指定的 虚拟主机服务器 ( Virtual Host ) 发送消息
(2) 虚拟主机服务器内部的交换器 ( Exchange,简称 X ) 接收消息,并将 消息传递并存储到与之 绑定 (Binding) 的 消息队列 (Queue)中。
(3) 消息消费者 ( Consumer,简称 C )通过一定的
网络连接
( Connection )与 消息代理建立连接,同时为了 简化开支,在 连接内部使用了多路复用信道
( Channel ) 进行消息最终消费

2.2 RabbitMQ “工作模式介绍”

  • RabbitMQ 消息中间件针对不同的服务需求,提供了 多种工作模式。下面将对 RabbitMQ支持工作模式工作原理进行简要说明
① Work queues 工作模式 ( “工作队列” 模式 ) - ( 适用于"较为繁重" , 可以进行 “拆分处理” 的 业务 )
  • 参考 RabbitMQ 官方文档Work queues 工作模式流程示意图下图所示 :

    在这里插入图片描述

    Work queues 工作模式中,不需要设置交换器 ( RabbitMQ使用内部默认交换器进行消息转换 ),需要指定 唯一消息队列进行消息传递,并且可以多个消息消费者

    这种模式下多个消息消费者 通过 轮询的方式 依次接收 消息队列存储的消息一旦消息被某一个消费者接收消息队列将消息 移除,而接收处理消息消费者 必须在 消费完一条消息后再准备接收下一条消息从上面的分析可以发现Work queues 工作模式 适用于那些较为繁重,并且可以 进行拆分处理业务,这种情况下可以 分派给多个消费者轮流处理业务

② Publish/Subscribe 工作模式 ( “发布订阅” 模式 ) - ( 适用于 “相同业务功能处理” 的 场合 )
  • 参考 RabbitMQ 官方文档Publish/Subscribe工作模式流程示意图下图所示 :

    在这里插入图片描述

    Publish/Subscribe 工作模式中,必须先配置一个 direct类型交换器不需要指定对应的路由键 ( Routing key ),同时会 将消息路由 到每一个 消息队列 上,然后 每个消息队列都可以对相同的消息进行接收存储,进而由 各自消息队列关联消费者 进行 消费

    上面的分析可以发现Publish/Subscribe 工作模式适用于进行相同业务功能处理场合,例如,用户注册成功后需要同时发送邮件通知短信通知,那么邮件服务消费者短信服务消费者需要共同消费用户注册成功” 这一条消息

③ Routing 工作模式 ( "路由"模式 ) - ( 适用于 "不同类型消息"分类处理的 场合 )
  • 参考 RabbitMQ 官方文档Routing 工作模式流程示意图下图所示 :

    在这里插入图片描述

    Routing 工作模式中,必须先配置一个 direct类型交换器,并指定不同路由键值 ( Routing key ) 将 对应的消息交换器路由不同消息队列进行 存储,由消费者进行各自消费

    上面的分析可以发现Routing 工作模式 适用于进行 “不同类型消息” 分类处理场合。例如 日志收集处理,用户可以配置不同路由键值分别对不同级别日志信息进行分类处理

④ Topics工作模式 ( "通配符模式"模式 ) - ( 适用于 根据不同需求 “动态传递处理业务” 的场合 )
  • 参考 RabbitMQ 官方文档Topics 工作模式流程示意图下图所示 :

    在这里插入图片描述

    Topics 工作模式 中,必须**先配置**一个 topic类型交换器,并指定不同路由键值 ( Routing key ) 将 对应的消息交换器路由不同消息队列进行 存储,然后由消费者进行各自消费

    Topics 模式Routing 模式主要不同在于 : Topics 模式设置的路由键包含通配符的,其中# 匹配 多个字符, *匹配 一个字符,然后与其他字符一起使用“.进行连接,从而组成动态路由键,在 发送消息 时可以 根据需求设置不同路由键,从而 将消息路由不同的消息队列

  • 通常情况下Topics 工作模式适用于根据不同需求 "动态传递处理业务"场合。例如,一些订阅客户只接收邮件消息一些订阅客户只接收短信消息,那么可以根据客户需求进行 动态路由匹配 从而 将订阅消息分发到不同的消息队列 中。

⑤ RPC工作模式 - ( 适用于 "分布式"架构的 “消息传递业务” / 适用于 “远程服务调用” 的业务场合 )
  • 参考 RabbitMQ 官方文档RPC 工作模式流程示意图下图所示 :

    在这里插入图片描述

    RPC 工作模式Work queues 工作模式主体流程相似,都 不需要设置交换器需要指定唯一消息队列 进行 消息传递

    RPC 工作模式Work queues 工作模式主要不同在于 : RPC 模式是一个回环结构,主要针对分布式架构消息传递业务客户端 : Client 先发送消息消息队列远程服务端 : Server 获取消息,然后 再写入另一个消息队列,向 原始客户端 : Client 响应消息处理结果

  • 上面的分析可以发现,RPC 工作模式 适用于 远程服务调用业务处理场合。例如,在分布式架构中必须考虑的分布式事务管理问题

⑥ Headers工作模式
  • Headers 工作模式RabbitMQ 所支持的工作模式中是较为少用的一种模式,其主体流程Routing 工作模式 有些相似。不过,使用 Headers 工作模式时,必须设置一个headers 类型交换器,而不需要设置路由键,取而代之的是在 Properties 属性配置中的 headers 头信息中使用keyvalue 的形式配置路由规则。由于 Headers 工作模式使用较少官方文档也没有详细说明
⑦ 总结
  • 上面讲述 RabbitMQ 支持6种工作模式原理,其中有些工作模式可以 嵌套使用,例如,在 发布订阅模式中加入工作队列模式。这里介绍的6种工作模式Publish/SubscribeRoutingTopicsRPC模式开发中较为常用工作模式

三、Erlang + RabbitMQ "安装"以及 “整合环境搭建” :

3.1 下载并安装 Erlang 和 RabbitMQ + RabbitMQ"可视化效果展示"

  • RabbitMQ 支持多平台安装,例如 LinuxWindowsMacOSDocker等。这里,我们以 Windows 环境为例,介绍 RabbitMQ安装配置

  • 第一步
    下载并安装Erlang :

    原因RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ前提 : 是安装Erlang
    ( 安装Erlang语言包时,必须以管理员的身份进行安装。) 下载地址http://www.erlang.org/downloads

    在这里插入图片描述


    第二步
    系统环境新建变量 + 编辑path并在其中添加 "ERLANG_HOME" 这个 变量名 :
    变量名ERLANG_HOME
    变量值erlang安装地址

    :

    在这里插入图片描述


    在这里插入图片描述

    : %ERLANG_HOME%\bin

    在这里插入图片描述

    在这里插入图片描述

    检验
    cmd控制台输入erl,看到版本号说明erlang安装成功

    在这里插入图片描述


    第三步
    下载并安装RabbitMQ :
    下载地址https://www.rabbitmq.com/

    百度网盘获取RabbitMQ软件https://pan.baidu.com/s/1-RFOp3Tr5_jj22RFgS7zpw?pwd=krnl

    下载完后直接安装


    第四步
    安装RabbitMQ-Plugins

    rabbitmq-plugins enable rabbitmq_management

    在这里插入图片描述

    在这里插入图片描述

    输入 rabbitmqctl status 检验是否安装成功

    第五步
    运行RabbitMQ , 打开**sbin目录,双击rabbitmq-server.bat** ,后在浏览器访问访问 : http://localhost:15672展示效果如下图所示

    在这里插入图片描述
    默认用户名密码都是 guest登录成功后会进入RabbitMQ可视化管理页面首页
    ( RabbitMQ 默认提供
    两个端口号
    567215672,其中 5672 用作服务端口号15672用作可视化管理端口号。)

3.2 Spring Boot “整合RabbitMQ” 环境搭建 :

① 创建Spring Boot 项目
  • 创建项目 :

    在这里插入图片描述

② 配置文件中添加 “配置信息”
  • 配置文件中添加 "配置信息" :
#配置RabbitMQ消息中间件的"连接配置"
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#配置RabbitMQ虚拟主机路径/ , 默认可省略
spring.rabbitmq.virtual-host=/

连接的 RabbitMQ服务端口号为 : 5672 , 并使用默认用户guest连接

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

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

相关文章

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台 摘要 随着信息技术的迅速发展,快速构建高质量、高可靠性的企业级应用成为了迫切需求。XBoot,作为一个基于Spring Boot 2.x的一站式前后端分离快速开发平台,通过整合微信…

CSS选择器、字体文本属性、三大特性、盒子模型等

目录 导入css简介HTML的局限性CSS-网页美化CSS语法规范CSS代码风格 选择器基础选择器复合选择器 CSS字体属性字体系列字体大小字体粗细文字样式字体复合属性 CSS文本属性文本颜色对齐文本装饰文本文本缩进行间距(即行高) CSS的引入方式emmet语法元素显示模式什么是?…

百度下拉框负面信息如何删除?

百度头条360等搜索引擎,作为人们获取信息的主要途径之一。然而,一些知名的企业或个人可能会面临在搜索的下拉框中出现负面信息的问题,这可能对其声誉和形象造成不良影响。小马识途营销顾问根据自身从业经验,针对这类情况提出以下建…

【R语言】描述性数据分析与数据可视化

我们处理的变量可以分为两类,一类是连续型变量,另一类叫做分类型变量,其中对于连续型变量,如果服从正态分布就用平均值填充NA,不服从正态分布就用中位数填充NA,对于分类型变量,不管是有序的&…

记服务器被挖矿的一次排查

1、top 查看进程使用情况,进程名为 kswapd0 用了180%的CPU,我的机器是2C的,所以基本上算是吃掉了所有的CPU资源,很明显罪魁祸首就是它。 2、执行命令 netstat -antlp | grep kswapd0 查询该进程的网络信息,发现一个与…

漫谈音频深度伪造技术

作为人工智能时代的新型媒体合成技术,深度伪造技术近年来在网络媒体中的涉及领域越发广泛、出现频次越发频繁。据路透社报道,2023年,社交媒体网站上发布50万个深度伪造的语音和视频。 1、深度伪造技术的五个方面 音频深度伪造技术&#xff…

Unity 性能优化之静态批处理(三)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、静态批处理是什么?二、使用步骤1.勾选Static Batching2.测试静态合批效果 三、静态合批得限制1、游戏对象处于激活状态。2、游戏对象有一…

tomcat+maven+java+mysql图书管理系统1-配置项目环境

目录 一、软件版本 二、具体步骤 一、软件版本 idea2022.2.1 maven是idea自带不用另外下载 tomcat8.5.99 Javajdk17 二、具体步骤 1.新建项目 稍等一会,创建成功如下图所示,主要看左方目录相同不。 给maven配置国外镜像 在左上…

前端工程化06-JavaScript模块化CommonJS规范ES Module

7、JavaScript模块化 在js开发中,他并没有拆分的概念,并不像java一样他可以拆分很多的包,很多的类,像搭积木一样完成一个大型项目的开发,所以js在前期的时候并不适合大型后端的项目开发,但是这些问题在后来…

16_Scala面向对象编程_函数

文章目录 1.声明Scala函数2.访问伴生对象3.空对象直接用的方法4.构造对象--通过object获取单例对象--直接new--scala独有apply()方式--scala有参构造--scala构造方法两大类使用辅构造如下上述代码主构造为辅助构造方法甚至可以多个多个辅助构造形参内容不能重不使用辅助构造和使…

Linux文件类型及目录和文件的权限

一、Linux 文件类型 1、Windows文件类型 2、Linux文件类型 1普通文件类型 Linux 中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据 格式的文件(data);各种压缩文件.第一个属性为 - 2目录文件 就是目录, 能用 # cd 命…

【微服务】服务保护(通过Sentinel解决雪崩问题)

Sentinel解决雪崩问题 雪崩问题服务保护方案服务降级保护 服务保护技术SentinelFallback服务熔断 雪崩问题 在微服务调用链中如果有一个服务的问题导致整条链上的服务都不可用,称为雪崩 原因 微服务之间的相互调用,服务提供者出现故障服务的消费者没有…

Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】

合集 - Unity学习笔记(13)1.Unity学习笔记–基础2023-11-012.Unity学习笔记–入门2023-10-293.Unity学习笔记–数据持久化之PlayerPrefs的使用2023-11-194.Unity学习笔记–数据持久化XML文件(1)2023-11-205.Unity学习笔记–数据持久化XML文件(2)2023-12-…

ADS基础教程8-仿真库加载

目录 一、系统库介绍二、厂商库1.模型下载1)登录官网2)选择所需模型3)点击下载4)指定保存路径 二.模型加载1)设计套件选择2)选择解压文件3)解压文件成功4)添加到当前workspace5&…

在STM32中用寄存器方式点亮流水灯

文章目录 实验资料一、对寄存器的理解1.通俗认识寄存器2.深入了解寄存器(1)端口配置低寄存器(配置0到7引脚的寄存器)(2)端口配置高寄存器(配置8到15引脚) 3.GPIO口的功能描述 二、配…

在线协作,开源的设计和原型创作平台:penpot

penpot:面向团队,设计自由- 精选真开源,释放新价值。 概览 Penpot 是一款专为跨职能团队量身定制的开源设计软件,与行业领先的 Figma 齐名,提供了一个强大而灵活的在线设计解决方案。其最大的亮点在于,用户…

五一假期零碎时间练习学习过的内容(商城版)

目录 1 总览1.1 技术架构1.2 其他1.2.1 数据库1.2.2 后端部分1.2.2.1 复习feign1.2.2.2 复习下网关网关的核心功能特性:网关路由的流程断言工厂过滤器工厂全局过滤器 过滤器执行顺序解决跨域问题 1.2.2.3 es部分复习 1.2.3 前端部分 2 day1 配置网关2.1 任务2.2 网关…

5.3 调制与解调

信号的调制与解调是通信系统中一对基本的概念,涉及将信息(语音、视频、数据等)在发送之前进行处理以便在传输介质(如无线电波、电话线等)上有效传输,以及在接收端恢复这些信息的过程。 一、调制&#xff0…

Java | Leetcode Java题解之第60题排列序列

题目&#xff1a; 题解&#xff1a; class Solution {public String getPermutation(int n, int k) {int[] factorial new int[n];factorial[0] 1;for (int i 1; i < n; i) {factorial[i] factorial[i - 1] * i;}--k;StringBuffer ans new StringBuffer();int[] valid…

虚拟机jvm下

jvm原理与实践 java程序的跨平台特性 jvm基本结构 JVM类加载流程和内存结构总览 类加载 加载阶段 类加载 验证阶段 类加载 准备阶段 类加载 解析阶段 类加载 初始化阶段 程序计数器 虚拟机栈&本地方法栈 栈帧操作 堆 方法区 永久代 元空间 垃圾回收 可触及性