Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“
目录:
- 一、"消息服务" 概述 :
- 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 常用 “消息中间件” 介绍 :
消息队列中间件 ( 简称:消息中间件 ) 是指利用高效可靠的 消息传递机制进行与平台无关的数据交流,并基于 数据通信 来进行 分布式系统的集成。
常见的消息中间件有 : ActiveMQ、RabbitMQ、Kafka、RocketMQ 等。目前市面上的消息中间件各有侧重点,选择适合自己、能够扬长避短的无疑是最好的选择。
ActiveMQ ( 广泛应用于中小型企业 )
- ActiveMQ 是 Apache 公司出品的、采用 Java 语言编写的、完全基于 JMS 规范 ( java Message Service )的、面向消息的中间件,它为应用程序提供高效、可扩展的、稳定的、安全的企业级消息通信。ActiveMQ 丰富的 API 和 多种集群构建模式使得它成为业界老牌的消息中间件,广泛的**应用于中小型企业中。相较于后续出现的 RabbitMQ、RocketMQ、Kafka 等消息中间件来说,ActiveMQ 性能相对较弱**,在如今的 高并发 、大数据处理的场景下 显得力不从心,经常会出现一些问题, 例如 消息延迟、堆积、堵塞等 。
RabbitMQ ( 没有特别要求的场景下,常用"RabbitMQ中间件" )
- RabbitMQ 是使用 Erlang 语言开发的 开源消息队列系统,基于 AMQP协议 ( Advanced Message Queuing Protocol ) 实现。AMQP 是为 应对大规模并发活动而 提供统一消息服务的 应用层标准高级消息队列协议,专门为面向消息的中间件设计,该协议更多用在企业系统内,对 数据一致性、稳定性 和 可靠性要求很高的 “场景”,对 性能和 吞吐量的 要求还在其次。正是 基于 AMQP协议 的 各种优势性能,使得 RabbitMQ 消息中间件在应用开发中越来越受欢迎。
Kafka ( “大数据业务” 可使用该中间件 )
- Kafka 是由 Apache 软件基金会开发的一个 开源流处理平台,它是一种 高吞吐量 的 分布式发布订阅消息系统,采用 Scala 和 Java 语言编写,提供了快速、可扩展的、分布式的、分区的和可复制的日志订阅服务,其主要特点是追求高吞吐量,适用于产生大量数据的互联网服务的数据
收集业务。
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 工作模式中,必须先配置一个 "fanout"类型 的交换器,不需要指定对应的路由键 ( 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/Subscribe、Routing、Topics 和 RPC模式 是 开发中较为常用 的 工作模式。
三、Erlang + RabbitMQ "安装"以及 “整合环境搭建” :
3.1 下载并安装 Erlang 和 RabbitMQ + RabbitMQ"可视化效果展示"
RabbitMQ 支持多平台安装,例如 Linux、Windows、MacOS、Docker等。这里,我们以 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 默认提供了两个端口号: 5672和 15672,其中 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连接。
相关文章:
Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“
目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) ?① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…...
二层交换机与路由器连通上网实验
华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备,用于在局域网(LAN)中转发数据帧。它工作在OSI模型的第二层,即数据链路层。二层交换机通过学习和维护MAC地址表,实现了数据的快速转发和广播域的隔离。 实…...
AJAX知识点(前后端交互技术)
原生AJAX AJAX全称为Asynchronous JavaScript And XML,就是异步的JS和XML,通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势:无需刷新就可获取数据。 AJAX不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式 …...
用wordpress为外贸进出口公司搭建多语言国际站
使用WordPress为外贸进出口公司搭建多语言国际站是一个很好的选择,因为WordPress不仅易于使用,而且具有丰富的插件和主题,可以支持多语言内容。以下是搭建多语言国际站的步骤和建议: 安装WordPress:首先,您…...
雷军-2022.8小米创业思考-6-互联网七字诀之口碑:口碑即定位,超预期才有口碑,品牌建设
第六章 互联网七字诀 专注、极致、口碑、快,这就是我总结的互联网七字诀,也是我对互联网思维的高度概括。 口碑 用户口碑是所有产品成功的关键因素,这是不言而喻的公理。 资源永远有限,对于创业公司尤其如此。只有专注…...
欧盟MDR法规对医疗器械网络安全都有哪些要求?
MDR,欧盟医疗器械法规(Medical Device REGULATION (EU) 2017/745,简称“MDR”),当医疗器械办理欧盟CE认证时,需满足新法规 MDR (EU) 2017/745要求。 M DR符合性评估 医械网络安全咨询与相关文件出具&#x…...
Linux —— 信号初识
Linux —— 信号初识 什么是信号测试几个信号signal函数函数原型参数说明返回值注意事项示例 后台程序前台转后台检测输入中断向量表 我们今天来继续学习Linux的内容,今天我们要了解的是Linux操作系统中的信号: 什么是信号 信号是操作系统内核与进程之…...
webpack进阶 -- 自定义Plugin,Loader封装打包优化
介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。在 Webpack 处理应用程序时,它会在内部构建一个依赖图(dependency graph),这个依赖图对应映射到项目所需的每个模块,并生成一个或多个 bundle。在这个过程中…...
《Decoupled Optimisation for Long-Tailed Visual Recognition》阅读笔记
论文标题 《Decoupled Optimisation for Long-Tailed Visual Recognition》 长尾视觉识别的解耦优化 作者 Cong Cong、Shiyu Xuan、Sidong Liu、Shiliang Zhang、Maurice Pagnucco 和 Yang Song、 来自新南威尔士大学计算机科学与工程学院、北京大学计算机学院多媒体信息处…...
Springboot+Vue项目-基于Java+MySQL的毕业就业信息管理系统(附源码+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...
条件平差——以水准网平差为例 (python详细过程版)
目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、原理概述 条件平差的函数模型和随机模型为: A V + W = 0...
mysql -- WITH RECURSIVE 语法
引言 在 SQL 中,WITH RECURSIVE 是一个用于创建递归查询的语句。它允许你定义一个 Common Table Expression (CTE),该 CTE 可以引用自身的输出。递归 CTE 非常适合于查询具有层次结构或树状结构的数据,例如组织结构、文件系统或任何其他具有…...
洗地机什么品牌好?洗地机怎么选?618洗地机选购指南
随着科技的飞速发展,洗地机以其高效的清洁能力、稳定的性能和用户友好的设计而闻名,不仅可以高效吸尘、拖地,还不用手动洗滚布,已经逐渐成为现代家庭不可或缺的清洁助手。然而,在众多品牌和型号中,如何选择…...
nginx负载均衡配置
1.nginx负载均衡配置 upstream lbs {server 192.168.1.12:8080;server 192.168.1.12:8081; }server {listen 80;server_name localhost a.com;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}locatio…...
HarmonyOS NEXT星河版之美团外卖点餐功能实战(中)
接上 一、UI布局 1.1 购物车Item Preview Component export struct MTCartItemView {build() {Row({ space: 6 }) {Image(https://bkimg.cdn.bcebos.com/pic/4d086e061d950a7bc94a331704d162d9f3d3c9e2).width(42).aspectRatio(1).borderRadius(5)Column({ space: 3 }) {Text…...
CTF-Web Exploitation(持续更新)
CTF-Web Exploitation 1. GET aHEAD Find the flag being held on this server to get ahead of the competition Hints Check out tools like Burpsuite to modify your requests and look at the responses 根据提示使用不同的请求方式得到response可能会得到结果 使用…...
图书管理系统c语言
创建一个图书管理系统是一个涉及数据结构和文件操作的项目。在C语言中,你可以使用结构体来表示图书信息,使用函数来实现系统的各项功能。以下是一个简单的图书管理系统的示例,包括基本的添加、显示、查找和删除图书的功能。 1. 定义图书结构…...
森林消防—高扬程水泵,高效、稳定、可靠!/恒峰智慧科技
森林,作为地球的“绿色肺叶”,不仅为我们提供了丰富的自然资源,更是维持生态平衡的重要一环。然而,随着全球气候的变化和人为活动的增加,森林火灾频发,给生态环境和人民生命财产安全带来了巨大威胁。在森林…...
光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型
光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型。光伏设备制造5G智能工厂数字孪生可视化平台是光伏行业数字化转型的重要一环。通过数字孪生平台,光伏设备制造企业可以实现对生产过程的全面监控和智能管理,提高生产效率&#…...
【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series
【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series 摘要 这段文字介绍了一个名为TS2Vec的通用框架,用于学习时间序列数据的表示,可以在任意语义层次上进行。与现有方法不同,TS2Vec通过对增强的上下文视图进行层次化…...
windows驱动开发-DMA技术(一)
DMA(Direct Memory Access)是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量中断负载,否则CPU 需要从设备缓存中把每一页的数据复制到缓存中,然后把它们再次写入到新的地方,在这个过…...
实用的Chrome命令
以下是一些实用的Chrome命令及其用途: --allow-outdated-plugins:允许浏览器使用过期的插件,这在开发过程中可能会用到,以便测试兼容性。chrome://downloads:打开Chrome的下载页面,查看和管理你的下载文件…...
数据库(MySQL)基础:约束
一、概述 1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2.目的:保证数据库中数据的正确、有效性和完整性。 3.分类 约束描述关键字非空约束限制该字段的数据不能为nullnot null唯一约束保证该字段的所有数据都是唯一…...
ControlNet作者放大招!IC-Light:控制生成图片光照效果!
ControlNet作者张吕敏近日又开源了一项新的工作:IC-Light (Impose Constant Light),在不改变图片内容的条件下,可以控制生成图片的光照效果。 作者发布了两种类型的模型:文本条件重打光模型和背景条件重打光…...
【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)
📝个人主页:哈__ 期待您的关注 目录 一、无继承关系类的初始化 1、静态变量k被初始化 2、静态变量t1初始化 3、静态变量 t2初始化 4、静态变量i初始化 5、静态变量n初始化 6、静态块初始化 7、非静态块初始化 8、非静态属性初始化 9、执行构造…...
在RK3588开发板使用FFMpeg 结合云服务器加SRS实现摄像头数据推流到云端拱其他设备查看
今天测试了一把在开发板把摄像头数据推流到云端服务器,然后给其他电脑通过val软件拉取显示摄像头画面,浅浅记录一下大概步骤 1.开发板端先下载ffmpeg apt install ffmpeg2.云服务器先安装SRS的库 云服务器我使用ubuntu系统,SRS是个什么东西&…...
elasticsearch搭建教程
主要参看这里就行,需要特别注意其中报错的解决方案:搭建elasticsearch 单机节点里,按照上述教程搭建只能开放本地访问,如果需要其他机器访问,需要在elasticsearch.yml里新增几个配置: node.name: node-1 network.host…...
c++ 归并排序
归并排序是一种遵循分而治之方法的排序算法。它的工作原理是递归地将输入数组划分为较小的子数组并对这些子数组进行排序,然后将它们合并在一起以获得排序后的数组。 简单来说,归并排序的过程就是将数组分成两半,对每一半进行排序,…...
基于vs和C#的WPF应用之动画3
注:1、在内部和外部使用缓动函数 <Grid.Resources> <PowerEase x:Key"powerease" Power"3" EasingMode"EaseInOut"/> </Grid.Resources> <DoubleAnimation EasingFunction"{StaticResource powerease}&quo…...
Python import 必看技巧:打造干净利落的代码结构
大家好,学习Python你肯定绕不过一个概念import,它是连接不同模块的桥梁,是实现代码复用和模块化的关键。本文将带你深入探索Python中import的原理,并分享一些实用的导入技巧。 1. import 原理 导入机制概述 在Python中,模块(module)是一种封装Python代码的方式,它允许…...
b2c网站的认识/哪里可以代写软文
对于大部分IT人士来说,给电脑重装系统、迁移操作系统、给硬盘分区、磁盘分区克隆等都是经常要做且不得不做的事情,那么使用哪款软件来管理磁盘分区,就成了大多数人比较纠结的问题。究竟有没有什么分区管理软件是比较靠谱又安全的呢࿱…...
工业设计网站外网/seo外链网
【1】决定多长时间启动所有线程。如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。Ramp-up需要充足长以避免在启动测试时有一个太大的工作负…...
wordpress 主题 结构/推广点击器
iOS常用传值小结 ************************************* 最简单的用第二个界面的label来显示第一个界面的textField中的文本 (一)属性传值----前向后传值 1.我们首先要在RootViewController的基础上创建一个DetailViewController,然后我们要记住传值过程中用到什么…...
个人做的网站百度搜索不到/公众号怎么开通
TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems 白皮书pdf...
辽宁城市建设网站/百度排名优化
Autotools包含一系列工具:automake、autoconf、autoscan、aclocal等工具组成,使用这组工具可以生成一个完整项目的Makefile。还是看流程图一目了然: 1、准备源文件 以最简单的helloworld为例: bookUbuntu:~/work/Autotools$ l…...
web扁平化风格网站/青岛seo整站优化
由于公司的业务不断拓展,生产环境的 APK 大小也从我最初进入公司时的 70M 变为了160MB ,在分析了 APK 结构目录之后,常规的压缩方案已经收效甚微了,动态加载第三方的 SO 文件是下一个优化的重点。SO 文件本质上就是一种可动态加载…...