当前位置: 首页 > news >正文

【消息队列RocketMQ】一、RocketMQ入门核心概念与架构解析

在当今互联网技术飞速发展的时代,分布式系统的架构设计愈发复杂。消息队列作为分布式系统中重要的组件,在解耦应用、异步处理、削峰填谷等方面发挥着关键作用。RocketMQ 作为一款高性能、高可靠的分布式消息中间件,被广泛应用于各类互联网场景。之前我们发过中间件kafka,其功能与RocketMQ有些类似。但是毕竟是两个技术的迭代。下面让我们一起走进RocketMQ系列文章。

一、消息队列核心概念​

1.1 什么是消息队列​

消息队列(Message Queue)是一种应用间的通信方式,它允许不同的应用程序通过发送和接收消息来进行交互。简单来说,消息队列就像是一个存放消息的 “容器”,发送方将消息放入队列中,接收方从队列中取出消息进行处理 。在分布式系统中,消息队列可以解决应用程序之间的耦合问题,提高系统的可扩展性和稳定性。

1.2 消息队列的应用场景​

        1、异步处理:在电商系统中,用户下单后,需要进行库存扣减、订单记录、发送短信通知等一系列操作。如果采用同步处理,用户需要等待所有操作完成才能得到响应,体验较差。通过引入消息队列,将发送短信通知等非核心操作异步化处理,用户下单后立即返回响应,后续操作由消息队列异步完成,大大提高了系统的响应速度。​

        2、应用解耦:以一个大型的在线教育平台为例,课程服务、用户服务、支付服务等多个微服务之间存在复杂的调用关系。使用消息队列后,各个服务之间不再直接依赖,而是通过消息进行通信。当课程服务发布新课程时,只需将消息发送到消息队列,用户服务和支付服务根据自身需求从队列中获取消息进行处理,降低了服务之间的耦合度,提高了系统的可维护性和扩展性。​

        3、削峰填谷:在电商大促活动期间,短时间内会有大量的订单请求涌入系统。如果直接将这些请求发送到数据库进行处理,可能会导致数据库负载过高甚至崩溃。通过消息队列,可以将大量的订单请求先暂存起来,然后按照系统的处理能力逐步消费,实现流量的削峰填谷,保证系统的稳定性。

1.3 消息队列的优势​

  • 提高系统性能:通过异步处理,减少了请求的等待时间,提高了系统的响应速度。​
  • 增强系统稳定性:解耦应用程序,降低了系统的复杂性,当某个应用出现故障时,不会影响其他应用的正常运行。​
  • 提升系统扩展性:方便地添加或移除应用程序,适应业务的快速发展。

二、RocketMQ 架构解析​

2.1 RocketMQ 核心组件​

RocketMQ 主要由 NameServer、Broker、Producer 和 Consumer 四大核心组件构成,它们相互协作,共同完成消息的发送、存储和消费。​

        1、NameServer:NameServer 是 RocketMQ 的命名服务,提供轻量级的服务发现和路由功能。它保存着 Topic 与 Broker 的映射关系,以及 Broker 的相关信息,如 Broker 的地址、状态等。Producer 和 Consumer 通过 NameServer 获取 Topic 的路由信息,从而找到对应的 Broker 进行消息的发送和消费。NameServer 是无状态的,各个 NameServer 之间相互独立,不存在数据同步等复杂操作,保证了其高可用性。​

        2、Broker:Broker 是 RocketMQ 的核心组件,负责消息的存储、转发和查询等操作。它接收 Producer 发送的消息,并将消息存储到磁盘上,同时为 Consumer 提供消息的拉取服务。Broker 可以分为 Master 和 Slave 两种角色,Master 负责处理读写请求,Slave 用于备份数据,提高系统的可靠性和可用性。当 Master 出现故障时,Slave 可以切换为 Master 继续提供服务。​

        3、Producer:Producer 即消息生产者,负责将业务系统产生的消息发送到 Broker。Producer 可以根据业务需求选择不同的消息发送模式,如同步发送、异步发送和单向发送。在发送消息时,Producer 会根据 Topic 从 NameServer 获取路由信息,然后将消息发送到对应的 Broker 上。​

        4、Consumer:Consumer 是消息消费者,从 Broker 中拉取消息并进行处理。Consumer 支持两种消费模式:集群消费和广播消费。集群消费模式下,多个 Consumer 实例组成一个消费组,共同消费 Topic 中的消息,每个消息只会被消费组中的一个 Consumer 实例消费;广播消费模式下,Topic 中的消息会被消费组中的所有 Consumer 实例消费。

2.2 组件间的交互流程​

        1、Broker 注册:Broker 启动后,会向所有的 NameServer 发送心跳包,将自己的信息注册到 NameServer 中,包括 Broker 的地址、所属集群、Topic 配置等信息。NameServer 会定期检查 Broker 的心跳,如果超过一定时间没有收到心跳,就认为 Broker 已经下线,将其从路由表中移除。​

        2、Producer 获取路由信息:Producer 启动时,会从 NameServer 获取 Topic 的路由信息,包括该 Topic 对应的所有 Broker 地址和队列信息。Producer 根据一定的负载均衡策略,选择一个 Broker 发送消息。在消息发送过程中,如果发现 Broker 不可用,Producer 会重新从 NameServer 获取路由信息,选择其他可用的 Broker 进行发送。​

        3、消息发送:Producer 根据获取的路由信息,将消息发送到对应的 Broker。Broker 接收到消息后,会将消息存储到 CommitLog 文件中,并更新 ConsumeQueue 和 IndexFile 等索引文件,以便 Consumer 快速查询和消费消息。​

        4、Consumer 获取消息:Consumer 启动时,同样会从 NameServer 获取 Topic 的路由信息。然后,Consumer 根据消费模式(集群消费或广播消费)和负载均衡策略,从对应的 Broker 拉取消息进行消费。在消费过程中,Consumer 会记录消费进度,以便在重启后能够继续从上次消费的位置开始消费。

三、在 CentOS 7 上安装配置 RocketMQ​

3.1 环境准备​

在安装 RocketMQ 之前,需要确保 CentOS 7 系统已经安装了 Java 环境,因为 RocketMQ 是基于 Java 开发的。可以通过以下命令检查 Java 是否安装:

java -version

如果没有安装 Java,可以使用以下命令安装 OpenJDK 8:

sudo yum install -y java-1.8.0-openjdk-devel

3.2 下载 RocketMQ​

访问 RocketMQ 官方 GitHub 仓库(https://github.com/apache/rocketmq),下载最新版本的 RocketMQ 安装包。这里以 RocketMQ 4.9.4 版本为例,使用以下命令下载和解压:

wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip
unzip rocketmq-all-4.9.4-bin-release.zip
cd rocketmq-all-4.9.4-bin-release

3.3 配置 NameServer​

  1. 启动 NameServer:进入 RocketMQ 安装目录的 bin 文件夹,使用以下命令启动 NameServer:
nohup sh mqnamesrv &

nohup命令用于在后台运行进程,即使终端关闭,进程也不会停止。启动成功后,可以通过以下命令查看 NameServer 的日志,确认是否启动正常:

tail -f ~/logs/rocketmqlogs/namesrv.log

如果日志中出现 “the name server is started success” 等类似信息,说明 NameServer 启动成功。​

      2. 配置文件说明:NameServer 的配置文件位于 RocketMQ 安装目录的 conf 文件夹下,文件名为broker.conf。在默认情况下,NameServer 不需要进行复杂的配置即可正常工作。不过,如果需要修改 NameServer 的监听端口、日志存储路径等参数,可以在配置文件中进行修改。例如,修改 NameServer 的监听端口为 9877,可以在配置文件中添加以下内容:

listenPort=9877

3.4 配置 Broker​

  1. 修改配置文件:进入 RocketMQ 安装目录的 conf 文件夹,找到broker.conf文件,对其进行修改。以下是一个简单的broker.conf配置示例:
# broker名称,同一集群内名称要唯一
brokerName=broker-a
# 所属集群名称
brokerClusterName=DefaultCluster
# brokerId,0表示Master,大于0表示Slave
brokerId=0
# NameServer地址,多个地址用分号分隔
namesrvAddr=localhost:9876
# 存储路径
storePathRootDir=/home/rocketmq/store
# commitLog存储路径
storePathCommitLog=/home/rocketmq/store/commitlog
# 消费队列存储路径
storePathConsumeQueue=/home/rocketmq/store/consumequeue
# 消息索引存储路径
storePathIndex=/home/rocketmq/store/index
# checkpoint文件存储路径
storeCheckpoint=/home/rocketmq/store/checkpoint
# abort文件存储路径
abortFile=/home/rocketmq/store/abort

在上述配置中,brokerName、brokerClusterName、brokerId等参数需要根据实际情况进行设置。namesrvAddr要指向正确的 NameServer 地址和端口。存储路径相关参数可以根据磁盘空间等情况进行调整。​

     2. 启动 Broker:使用以下命令启动 Broker:

nohup sh mqbroker -c conf/broker.conf &

-c参数指定配置文件的路径。启动成功后,可以通过以下命令查看 Broker 的日志:

tail -f ~/logs/rocketmqlogs/broker.log

如果日志中出现 “the broker [broker-a, 192.168.1.10:10911] boot success” 等类似信息,说明 Broker 启动成功。​

3.5 验证安装​

  1. 发送消息:进入 RocketMQ 安装目录的 bin 文件夹,使用以下命令发送一条测试消息:
sh tools.sh org.apache.rocketmq.example.quickstart.Producer

该命令会执行 RocketMQ 自带的生产者示例代码,向 Broker 发送一条消息。​

      2. 接收消息:再打开一个终端,进入 RocketMQ 安装目录的 bin 文件夹,使用以下命令接收消息:

sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

如果能够正常接收到刚才发送的消息,说明 RocketMQ 的安装和配置是成功的。

后续文章中将持续更新RocketMQ更多内容和功能,可以关注小编,期待后续文章。

相关文章:

【消息队列RocketMQ】一、RocketMQ入门核心概念与架构解析

在当今互联网技术飞速发展的时代,分布式系统的架构设计愈发复杂。消息队列作为分布式系统中重要的组件,在解耦应用、异步处理、削峰填谷等方面发挥着关键作用。RocketMQ 作为一款高性能、高可靠的分布式消息中间件,被广泛应用于各类互联网场景…...

hadoop分布式部署

1. 上传jdk和hadoop安装包到服务器 2. 解压压缩包 tar xf jdk1.8.0_112.tgz -C /usr/local/ tar xf hadoop-3.3.6.tar.gz -C /usr/local/3. 关闭防火墙 systemctl stop firewalld systemctl disable firewalld4. 修改配置文件 core-site.xml、hadoop-env.sh、yarn-env.sh、…...

C++面试题集合(附答案)

C全家桶 C基础 1. C和C有什么区别? 2. C语言的结构体和C的有什么区别? 3. C 语言的关键字 static 和 C 的关键字 static 有什么区别? 4. C 和 Java有什么核心区别? 5. C中,a和&a有什么区别? 6. …...

23种设计模式-结构型模式之装饰器模式(Java版本)

Java 装饰器模式(Decorator Pattern)详解 🎁 什么是装饰器模式? 装饰器模式是一种结构型设计模式,允许向一个对象动态添加新的功能,而不改变其结构。 🧱 你可以想象成在原有功能上“包裹”一…...

UE5的BumpOffset节点

BumpOffset 节点的基本概念 本质上,BumpOffset 节点通过扭曲或偏移纹理坐标来创造深度错觉。它基于视角方向和高度信息动态地调整纹理采样位置,使平面表面看起来具有凹凸感。这是一种称为视差映射(Parallax Mapping)的技术的实现。 当你从不同角度观察…...

从跌倒到领跑:北京亦庄机器人马拉松如何改写人机协作未来?

目录 一、当铁骨遇见马拉松精神 二、半马背后的硬核突破 三、赛事背后的科技博弈 四、当机器人走出实验室 跌倒者的荣光 清晨7:30的南海子公园,发令枪响瞬间——20台形态各异的机器人以千奇百怪的姿态冲出起跑线,有的像蹒跚学步的孩童,有的如专业运动员般矫健,更有机器…...

Internet Protocol

一、IP 1. 基本概念 IP定义:IP 是为计算机网络相互连接进行通信而设计的协议,它规定了网络设备如何标识和寻址,以及数据如何在网络中传输和路由。IP作用:主要负责在不同的网络之间转发数据包,使数据能够从源主机准确…...

Android学习之实战登录注册能力

我们可以从本地 Token 存储、时效管理、服务端通知联动、定时器优化四个维度深入展开 一、本地 Token 存储设计(基于 SharedPreferences) 1. 存储结构优化(包含时效性字段) // 定义存储类(封装SharedPreferences操作…...

【数据可视化-19】智能手机用户行为可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

基于一致性哈希算法原理和分布式系统容错机制

一、传统取模算法的局限性分析 当使用User ID取模路由时,Pod挂断会导致以下问题: 数据雪崩效应:节点失效后所有请求需要重新计算取模值,导致缓存穿透和服务震荡服务不可用窗口:节点失效期间,原本路由到该节…...

[SpringBoot-1] 概述和快速入门(使用vscode)

1 SpringBoot 概念 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程…...

学习笔记二十——Rust trait

🧩 Rust Trait 彻底搞懂版 👀 目标读者:对 Rust 完全陌生,但想真正明白 “Trait、Trait Bound、孤岛法则” 在做什么、怎么用、为什么这样设计。 🛠 方法: 先给“心里模型”——用生活类比把抽象概念掰开揉…...

llama factory

微调大模型可以像这样轻松… https://github.com/user-attachments/assets/e6ce34b0-52d5-4f3e-a830-592106c4c272 选择你的打开方式: 入门教程:https://zhuanlan.zhihu.com/p/695287607框架文档:https://llamafactory.readthedocs.io/zh-…...

机器学习 Day12 集成学习简单介绍

1.集成学习概述 1.1. 什么是集成学习 集成学习是一种通过组合多个模型来提高预测性能的机器学习方法。它类似于: 超级个体 vs 弱者联盟 单个复杂模型(如9次多项式函数)可能能力过强但容易过拟合 组合多个简单模型(如一堆1次函数)可以增强能力而不易过拟合 集成…...

基于 Spring Boot 瑞吉外卖系统开发(五)

基于 Spring Boot 瑞吉外卖系统开发(五) 删除分类 分类列表中每条分类信息右侧提供了一个“删除”按钮,当需要将已经存在的分类信息删除时,可以通过单击“删除”按钮实现。 请求路径为/category,携带参数id&#xf…...

PyTorch基础笔记

PyTorch张量 多维数组:张量可以是标量(0D)、向量(1D)、矩阵(2D)或更高维的数据(3D)。 数据类型:支持多种数据类型(如 float32, int64, bool 等&a…...

什么是 IDE?集成开发环境的功能与优势

原文:什么是 IDE?集成开发环境的功能与优势 | w3cschool笔记 (注意:此为科普文章,请勿标记为付费文章!且此文章并非我原创,不要标记为付费!) IDE 是什么? …...

基于大数据的房产估价解决方案

基于大数据的房产估价解决方案 一、项目背景与目标 1.1 背景 在房地产市场中,准确的房产估价至关重要。传统的房产估价方法往往依赖于估价师的经验和有限的数据样本,存在主观性强、效率低等问题。随着大数据技术的发展,大量的房产相关数据被积…...

基于深度学习的线性预测:创新应用与挑战

一、引言 1.1 研究背景 深度学习作为人工智能领域的重要分支,近年来在各个领域都取得了显著的进展。在线性预测领域,深度学习也逐渐兴起并展现出强大的潜力。传统的线性预测方法在处理复杂数据和动态变化的情况时往往存在一定的局限性。而深度学习凭借…...

WEMOS LOLIN32

ESP32是結合Wi-Fi和藍牙的32位元系統單晶片(SoC)與外接快閃記憶體的模組。許多廠商生產採用ESP32模組的控制板,最基本的ESP控制板包含ESP32模組、直流電壓轉換器和USB序列通訊介面IC。一款名為WEMOS LOLIN32的ESP32控制板具備3.7V鋰電池插座。…...

VSCode 扩展离线下载方法

学习自该文章,感谢作者! 2025 年 VSCode 插件离线下载攻略:官方渠道一键获取 - 知乎 获取扩展关键信息 方法一:官网获取 打开 VSCode 扩展官方网站 搜索要下载的扩展,以 CodeGeeX 为例,网址为&#xf…...

计算机视觉与深度学习 | RNN原理,公式,代码,应用

RNN(循环神经网络)详解 一、原理 RNN(Recurrent Neural Network)是一种处理序列数据的神经网络,其核心思想是通过循环连接(隐藏状态)捕捉序列中的时序信息。每个时间步的隐藏状态 ( h_t ) 不仅依赖当前输入 ( x_t ),还依赖前一时间步的隐藏状态 ( h_{t-1} ),从而实现…...

对于网络资源二级缓存的简单学习

缓存学习 前言认识缓存磁盘储存内存储存磁盘内存组合优化 具体实现WebCacheMD5签名 WebDownloadOperationWebDownloaderWebCombineOperation 总结 前言 在最近的写的仿抖音app中,遇到了当往下滑动视频后,当上方的视频进入复用池后,会自动清空…...

【计量地理学】实验六 地理属性空间插值

一、实验目的 本次实验的主要目的在于熟练掌握空间克里格法插值的理论基础,包括其核心概念和步骤,能够通过数据可视化和统计分析方法识别数据中的异常值,并且掌握数据正态性的检验方法,理解正态分布对克里格法的重要性&#xff0…...

26考研 | 王道 | 数据结构 | 第六章 图

第六章 图 文章目录 第六章 图6.1. 图的基本概念6.2. 图的存储6.2.1. 邻接矩阵6.2.2. 邻接表6.2.3. 十字链表、临接多重表6.2.4. 图的基本操作 6.3. 图的遍历6.3.1. 广度优先遍历6.3.2. 深度优先遍历6.3.3 图的遍历与连通性 6.4. 图的应用6.4.1. 最小生成树6.4.2. 无权图的单源…...

window.addEventListener 和 document.addEventListener

window.addEventListener 和 document.addEventListener 是 JavaScript 中绑定事件的两个常用方法,核心区别在于 绑定的对象不同,导致事件的作用范围、触发时机和适用场景不同。下面用最直白的语言和案例对比说明: 一、核心区别:…...

51单片机的原理图和PCB绘制

51单片机最小系统原理图 加了两个led灯和按键检测电路。 PCB中原件摆放位置 成品 资源链接:https://download.csdn.net/download/qq_61556106/90656365...

kotlin知识体系(五) :Android 协程全解析,从作用域到异常处理的全面指南

1. 什么是协程 协程(Coroutine)是轻量级的线程,支持挂起和恢复,从而避免阻塞线程。 2. 协程的优势 协程通过结构化并发和简洁的语法,显著提升了异步编程的效率与代码质量。 2.1 资源占用低(一个线程可运行多个协程)…...

数据通信学习笔记之OSPF其他内容3

对发送的 LSA 进行过滤 当两台路由器之间存在多条链路时,可以在某些链路上通过对发送的 LSA 进行过滤,减少不必要的重传,节省带宽资源。 通过对 OSPF 接口出方向的 LSA 进行过滤可以不向邻居发送无用的 LSA,从而减少邻居 LSDB 的…...

Kubernetes相关的名词解释API Server组件(9)

什么是API Server? API Server(kube-apiserver) 是 Kubernetes 的核心组件之一,负责管理整个集群的通信和操作入口。 API Server 的作用在整个 Kubernetes 集群的正常运作中至关重要,可以说它是整个系统的神经中枢。…...

[密码学实战]密码服务平台部署架构详解与学习路线

密码服务平台部署架构详解与学习路线 引言 在数字化转型的浪潮中,数据安全已成为企业生存的“生命线”。国密算法(SM2/SM3/SM4)作为我国自主研发的密码标准,正在政务、金融、医疗等领域加速落地。然而,构建一套高可用、高性能、合规的密码服务平台,仍需攻克架构设计、性…...

如何成为Prompt工程师:学习路径、核心技能与职业发展

一、什么是Prompt工程师? Prompt工程师是专注于通过设计、优化和调试大语言模型(LLM)的输入提示词(Prompt),以精准引导模型输出符合业务需求结果的技术人才。其核心能力在于将模糊的业务需求转化为结构化、…...

OpenCV 边缘检测(Edge Detection)cv2.Canny

OpenCV 边缘检测(Edge Detection)cv2.Canny flyfish import cv2video_path input_video.mp4 cap cv2.VideoCapture(video_path)while True:ret, frame cap.read()if not ret:break # 视频结束# 转灰度frame_gray cv2.cvtColor(frame, cv2.COLOR_B…...

【C++】win 10 / win 11:Dev-C++ 下载与安装

目录 一、Dev-C 下载 (1)sourceforge 官网下载 (2)腾讯官网下载 二、Dev-C 安装 三、Dev-C 配置 (1)配置 C11 (2)配置产生调试信息 (3)个性化配置…...

2025年MathorCup竞赛助攻资料免费分享

对于本界竞赛B题其中问题需要设计软件框架,对于该问题回答,个人认为可以在设计框架下简单的进行软件展示,下面是初步展示的结果,仅供参考 【问题四:老城区平移置换决策软件设计】规划局希望这个案例能起到示范作用&am…...

征程 6 VIO 通路断流分析

自动驾驶场景中,常见的是多路感知通路,在不考虑应用获取释放帧异常操作的前提下,一般出现帧获取异常的情况,主要原因是通路中某段断流的情况,如何去准确的定位,对大部分客户来说,依赖我司的支持…...

JavaScript 性能优化

JavaScript 性能优化是提高 Web 应用性能的关键步骤,特别是在处理大量数据、复杂计算或频繁的 DOM 操作时。以下是一些常见的 JavaScript 性能优化技巧和策略: 文章目录 @[TOC]一、代码层面优化1. **减少全局变量**2. **避免使用 `with` 语句**3. **使用局部变量**4. **减少 …...

机器学习中的“三态模型“:过拟合、欠拟合和刚刚好

文章目录 说明1. 模型表现的"三国演义"2. 可视化理解:从曲线看状态3. 诊断模型:你的模型"病"了吗?4. 学习曲线:模型的"体检报告"5. 治疗"模型病"的药方 6. 偏差-方差分解:理解…...

在FVM(有限体积法)的CFD仿真中,AI和机器学习的应用

在FVM(有限体积法)的CFD仿真中,AI和机器学习(ML)可以通过以下方式显著提高收敛速度与计算效率,具体分为六个方向: 1. 加速非线性迭代收敛 替代传统松弛方法: 使用ML模型&#xff08…...

【21天学习打卡挑战赛】如何学习WEB安全:逼自己在短时间掌握WEB安全核心内容

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

网络安全知识点3

1.AES密钥长度可以为128,192,256位,但分组长度为128位 2.DES加密算法的密钥长度为56位,三重DES的密钥长度为112位 3.主动攻击:拒绝服务攻击,分布式拒绝服务DDOS,信息篡改,资源使用,欺骗,伪装,重放,会话拦截 被动攻击:窃听,流量分析,破解弱加密的数据流 4.IPSec可对数据进行…...

力扣每日打卡16 781. 森林中的兔子(中等)

力扣 781. 森林中的兔子 中等 前言一、题目内容二、解题方法1. 哈希函数(来自评论区大佬的解题方法)2.官方题解2.1 方法一:贪心 前言 这是刷算法题的第十六天,用到的语言是JS 题目:力扣 781. 森林中的兔子 (中等) 一、…...

STM32基础教程——HEX数据包接收

前言 串口,是一种应用范围十分广泛的通信接口,串口的成本较低,容易使用,通信线路简单,可以实现两个设备之间的通信。单片机的串口可以实现单片机与单片机,单片机与电脑,单片机与其他设备的通信…...

【JavaWeb后端开发02】SpringBootWeb + Https协议

课程内容: SpringBootWeb 入门 Http协议 SpringBootWeb案例 分层解耦 文章目录 1. SpringBootWeb入门1.1 概述1.2 入门程序1.2.1 需求1.2.2 开发步骤1.2.3 常见问题 1.3 入门解析 2. HTTP协议2.1 HTTP概述2.1.1 介绍2.1.2 特点 2.2 HTTP请求协议2.2.1 介绍2.2.2…...

基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(三)

上一篇 介绍了数据接入处理的整体方案设计。本篇介绍基于SmartETL框架的流程实现。 5. 流程开发 5.1.简单采集流程 从指定时间(yy年 mm月)开始,持续采集arXiv论文。基于月份和顺序号,构造论文ID,进而下载论文PDF文件…...

深入理解Linux中的线程控制:多线程编程的实战技巧

个人主页:chian-ocean 文章专栏-Linux 前言: POSIX线程(Pthreads) 是一种在 POSIX 标准下定义的线程库,它为多线程编程提供了统一的接口,主要用于 UNIX 和类 UNIX 系统(如 Linux、MacOS 和 BS…...

从内核到用户态:Linux信号内核结构、保存与处理全链路剖析

Linux系列 文章目录 Linux系列前言一、信号的保存1.1 信号保存概念引入1.2 信号的阻塞与保存1.2.1 信号其他相关常见概念1.2.2 信号在内核中的表示 二、信号相关接口2.1 signal_t 结构体类型2.2 信号集操作函数 三、信号的处理3.1 进程地址空间信号的检测与处理 总结 前言 Lin…...

【AI图像创作变现】02工具推荐与差异化对比

引言 市面上的AI绘图工具层出不穷,但每款工具都有自己的“性格”:有的美学惊艳但无法微调,有的自由度极高却需要动手配置,还有的完全零门槛适合小白直接上手。本节将用统一格式拆解五类主流工具,帮助你根据风格、控制…...

Spring Boot 集成Poi-tl实现动态Word文档生成

Spring Boot 集成Poi-tl实现动态Word文档生成 「gen-pic-word.zip」 链接: https://pan.quark.cn/s/74396770a5c2 前言 在项目开发过程中,遇到了一个需求:将用户输入的数据填充到给定格式的 Word 文档中。简单来说,就是要根据预…...

【失败总结】Win10系统安装docker

1.启用或关闭windows功能中,将Hyper-V功能勾选全部启用,容器勾选。设置好后要重启电脑。 2.管网下载下载安装Docker  Docker官网:https://www.docker.com/ 3.可以自定义Docker安装路径 新建安装目录:d:\MySoftware\Docker并将D…...