RabbitMQ 集群降配
这里写自定义目录标题
- 摘要
- 检查状态
- 1. 检查 RabbitMQ 服务状态
- 2. 检查 RabbitMQ 端口监听
- 3. 检查 RabbitMQ 管理插件是否启用
- 4. 检查开机自启状态
- 5. 确认集群高可用性
- 6. 检查使用该集群的服务是否做了断开重连
- 实操
- 1. 负载均衡配置
- 2. 逐个节点降配(滚动操作)
- 2.1 停止 RabbitMQ 服务
- 2.2 调整 ECS 配置
- 2.3 恢复节点并重新加入集群
- 2.4 恢复负载均衡流量
- 3. 全局监控与验证
- 4. 降配后优化(可选)
- 风险点与应对
- 总结
- 命令说明
- 查看集群状态命令 rabbitmqctl cluster_status
- 1. 集群节点状态
- 2. 网络分区
- 3. 告警状态
- 4. 集群名称
- 健康状态总结
- 进一步验证建议
- 1. 检查队列镜像状态
- 2. 检查资源使用情况
- 3. 检查日志
- 4. 监控连接数
- 查看节点同步状态 rabbitmqctl list_queues name pid slave_pids synchronised_slave_pids
- 字段含义
- 如何判断镜像同步完成
- 删除队列
- 在 RabbitMQ 中执行删除队列(`delete_queue`)操作时,如果出现 `Access refused` 错误,通常是由于权限问题导致的。以下是可能的原因及解决方法:
- 1. 用户权限不足
- 检查用户权限
- 解决方法
- 2. 队列被其他消费者占用
- 解决方法
- 3. 用户未绑定到正确的虚拟主机
- 检查虚拟主机
- 解决方法
摘要
背景:2025年云成本优化仍是技术团队的核心命题。当前需对遗留架构进行精细化治理,其中由前任架构师设计的RabbitMQ集群成为重点优化对象。该集群采用经典高可用架构,由3台阿里云ECS实例构成核心节点,并通过负载均衡(SLB)实现流量分发。然而,经监控分析发现,节点资源利用率长期低于40%,存在显著的配置冗余。在保障业务连续性的前提下,需通过降配调优实现成本节约。
ECS 配置:8C16G,CPU利用率 峰值18%, 内存峰值 25%
降配目标:平滑的将ECS节点降配至 2C8G
检查状态
1. 检查 RabbitMQ 服务状态
使用 systemctl
命令查看服务是否正在运行:
sudo systemctl status rabbitmq-server
- 输出结果:
- 如果显示
active (running)
,表示服务已启动。 - 如果显示
inactive (dead)
,表示服务未运行。
- 如果显示
2. 检查 RabbitMQ 端口监听
RabbitMQ 默认监听 5672
(AMQP 协议)和 15672
(管理界面)端口:
# 使用 netstat 或 ss 命令检查端口
sudo netstat -tuln | grep -E '5672|15672'
# 或
sudo ss -tuln | grep -E '5672|15672'
- 输出结果:如果有
LISTEN
状态的端口,说明服务正常。
3. 检查 RabbitMQ 管理插件是否启用
若需通过 Web 界面管理 RabbitMQ,需确认管理插件是否启用:
sudo rabbitmq-plugins list
- 输出结果:查找
rabbitmq_management
是否标记为[E*]
(已启用)。
4. 检查开机自启状态
确认 RabbitMQ 是否设置为开机自启:
sudo systemctl is-enabled rabbitmq-server
- 输出结果:
enabled
:已设置开机自启。disabled
:未设置开机自启(可通过sudo systemctl enable rabbitmq-server
启用)。
5. 确认集群高可用性
- 镜像队列配置:确保所有业务队列已配置镜像策略(如
ha-mode: all
或指定副本数),避免单节点故障导致消息丢失。# 查看当前策略 rabbitmqctl list_policies # 示例:设置所有队列在3个节点镜像 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
- 集群状态健康:确认所有节点状态为
running
,且无网络分区问题。rabbitmqctl cluster_status
6. 检查使用该集群的服务是否做了断开重连
实操
1. 负载均衡配置
- 设置待降配节点的权重:在负载均衡(如 SLB)中暂时设置待操作节点的流量权重为0,确保降配期间流量仅路由到其他节点。
2. 逐个节点降配(滚动操作)
2.1 停止 RabbitMQ 服务
sudo systemctl stop rabbitmq-server
- 验证节点离线:检查集群状态,确认该节点已标记为
down
。rabbitmqctl cluster_status
2.2 调整 ECS 配置
- 关机 ECS
- 降配操作:通过 ECS 控制台或 API 调整实例规格(CPU/内存)。
- 重启 ECS(如需):若配置变更需要重启,确保重启后网络和存储正常挂载。
2.3 恢复节点并重新加入集群
- 启动 RabbitMQ:
sudo systemctl start rabbitmq-server
- 重新加入集群:如果节点因 IP 或主机名变化无法自动加入,需手动操作(一般不需要重新加入)
# 在新节点上重置 RabbitMQ 并重新加入集群 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@<主节点主机名> rabbitmqctl start_app
- 验证集群状态:确保节点状态为
running
,且队列镜像同步完成。
2.4 恢复负载均衡流量
- 将节点权重恢复,观察健康检查状态。
3. 全局监控与验证
- 业务监控:观察消息堆积、消费延迟、连接数等指标。
- 集群同步状态:检查镜像队列同步进度。
rabbitmqctl list_queues name messages_ready messages_unacknowledged
- 日志检查:排查降配节点是否有异常报错。
tail -f /var/log/rabbitmq/rabbit@*.log
4. 降配后优化(可选)
- 调整内存阈值:根据新配置优化 RabbitMQ 内存限制(
vm_memory_high_watermark
)。 - 磁盘空间监控:确保降配后的磁盘容量足够(RabbitMQ 默认需至少 50MB 剩余空间)。
风险点与应对
- 同步延迟:降配节点重启后,若队列数据量大,同步时间可能较长。建议在低峰期操作。
- 配置兼容性:确保新规格满足 RabbitMQ 最低要求(如内存不低于 1GB)。
- 网络波动:降配期间若节点 IP 变化,需更新集群节点列表和负载均衡配置。
总结
通过 逐节点滚动降配 + 负载均衡流量切换,可实现业务无感知。关键点在于确保镜像队列冗余、集群健康状态,以及操作顺序的严谨性。建议先在测试环境模拟流程,再在生产环境执行。
命令说明
查看集群状态命令 rabbitmqctl cluster_status
输出结果解析
Cluster status of node rabbit@rabbitmq-prod-03 ...
[{nodes,[{disc,['rabbit@rabbitmq-prod-01','rabbit@rabbitmq-prod-02','rabbit@rabbitmq-prod-03']}]},{running_nodes,['rabbit@rabbitmq-prod-02','rabbit@rabbitmq-prod-01','rabbit@rabbitmq-prod-03']},{cluster_name,<<"rabbit@rabbitmq-prod-01">>},{partitions,[]},{alarms,[{'rabbit@rabbitmq-prod-02',[]},{'rabbit@rabbitmq-prod-01',[]},{'rabbit@rabbitmq-prod-03',[]}]}].
1. 集群节点状态
- 所有节点均在线:
{nodes}
列表显示集群包含 3 个磁盘节点(disc
类型):rabbit@rabbitmq-prod-01
,rabbit@rabbitmq-prod-02
,rabbit@rabbitmq-prod-03
。{running_nodes}
列表显示这 3 个节点当前都在运行。
2. 网络分区
- 无网络分区:
{partitions,[]}
表示没有发生网络分区问题。如果存在分区,partitions
字段会列出被隔离的节点及其分区信息。
3. 告警状态
- 无告警:
{alarms,[{'rabbit@rabbitmq-prod-02',[]}, {'rabbit@rabbitmq-prod-01',[]}, {'rabbit@rabbitmq-prod-03',[]}]}
表明所有节点均未触发任何告警(如内存、磁盘空间不足等)。
4. 集群名称
- 集群名称一致:
{cluster_name,<<"rabbit@rabbitmq-prod-01">>}
显示集群的名称为rabbit@rabbitmq-prod-01
,所有节点共享同一个集群名称,表明它们属于同一集群。
健康状态总结
从上述分析来看,你的 RabbitMQ 集群处于健康状态:
- 所有节点都在线且正常运行。
- 没有网络分区问题。
- 没有任何节点触发告警。
- 集群名称一致,结构完整。
进一步验证建议
虽然当前状态健康,但为了确保长期稳定运行,可以执行以下检查:
1. 检查队列镜像状态
确认队列是否在多个节点上正确镜像:
rabbitmqctl list_queues name pid slave_pids synchronised_slave_pids
- 确保关键队列的
slave_pids
和synchronised_slave_pids
包含至少 2 个节点。
2. 检查资源使用情况
监控节点的 CPU、内存和磁盘使用率,避免因资源不足导致性能下降或告警:
# 查看磁盘剩余空间
df -h# 查看内存使用情况
free -m# 查看 RabbitMQ 内存使用
rabbitmqctl status | grep -A 5 "memory"
3. 检查日志
查看 RabbitMQ 日志文件,排查潜在的警告或错误:
tail -n 20 /var/log/rabbitmq/rabbit@*.log
4. 监控连接数
确保各节点的连接数在合理范围内:
rabbitmqctl list_connections --node rabbit@rabbitmq-prod-03 | grep -v "Listing" | wc -l
查看节点同步状态 rabbitmqctl list_queues name pid slave_pids synchronised_slave_pids
命令输出解析
以下是 rabbitmqctl list_queues name pid slave_pids synchronised_slave_pids
的输出示例:
name: collector_event
pid: <rabbit@rabbitmq-prod-03.1606707793.6080.60>
slave_pids: [<rabbit@rabbitmq-prod-02.1607654826.19286.68>, <rabbit@rabbitmq-prod-01.1606707802.17230.4475>]
synchronised_slave_pids: [<rabbit@rabbitmq-prod-01.1606707802.17230.4475>, <rabbit@rabbitmq-prod-02.1607654826.19286.68>]
字段含义
-
name
:- 队列名称。例如:
collector_event
。
- 队列名称。例如:
-
pid
:- 主队列所在节点的进程 ID(Process ID)。例如:
<rabbit@rabbitmq-prod-03.1606707793.6080.60>
表示主队列位于rabbit@rabbitmq-prod-03
节点。
- 主队列所在节点的进程 ID(Process ID)。例如:
-
slave_pids
:- 副本队列所在的节点和进程 ID 列表。例如:
<rabbit@rabbitmq-prod-02.1607654826.19286.68>
表示该副本位于rabbit@rabbitmq-prod-02
。<rabbit@rabbitmq-prod-01.1606707802.17230.4475>
表示该副本位于rabbit@rabbitmq-prod-01
。
- 副本队列所在的节点和进程 ID 列表。例如:
-
synchronised_slave_pids
:- 已完成数据同步的副本队列所在的节点和进程 ID 列表。例如:
<rabbit@rabbitmq-prod-01.1606707802.17230.4475>
和<rabbit@rabbitmq-prod-02.1607654826.19286.68>
表示这两个副本已完成同步。
- 已完成数据同步的副本队列所在的节点和进程 ID 列表。例如:
如何判断镜像同步完成
-
比较
slave_pids
和synchronised_slave_pids
:- 如果
synchronised_slave_pids
包含所有slave_pids
中的节点,则表示所有副本均已同步完成。 - 示例分析:
slave_pids
:[<rabbit@rabbitmq-prod-02>, <rabbit@rabbitmq-prod-01>]
synchronised_slave_pids
:[<rabbit@rabbitmq-prod-01>, <rabbit@rabbitmq-prod-02>]
- 结论:
synchronised_slave_pids
包含了所有slave_pids
,说明镜像已完全同步。
- 如果
-
检查数量是否一致:
- 如果
slave_pids
和synchronised_slave_pids
的数量相同,且内容一致,则镜像同步完成。
- 如果
-
异常情况:
- 如果
synchronised_slave_pids
为空或少于slave_pids
,则表示某些副本尚未完成同步,需等待同步完成后再继续操作。可以到管理界面queue界面查看有哪些队里没有同步完成,可点击进入队列并手动同步。
- 如果
删除队列
rabbitmqctl delete_queue -p <host> <queue_name>
在 RabbitMQ 中执行删除队列(delete_queue
)操作时,如果出现 Access refused
错误,通常是由于权限问题导致的。以下是可能的原因及解决方法:
1. 用户权限不足
RabbitMQ 的用户权限分为三类:
- Configure:允许创建和删除队列、交换器等资源。
- Write:允许向队列发送消息。
- Read:允许从队列消费消息。
检查用户权限
使用以下命令查看当前用户的权限:
rabbitmqctl list_permissions -p <vhost>
<vhost>
是目标虚拟主机,默认为/
。- 输出示例:
Listing permissions for vhost "/" ... user configure write read guest .* .* .*
解决方法
确保当前用户对目标队列所在的虚拟主机具有足够的权限:
# 授予用户对虚拟主机的权限
rabbitmqctl set_permissions -p <vhost> <username> ".*" ".*" ".*"
<username>
:当前登录 RabbitMQ 的用户名。"."*
:表示匹配所有资源。
2. 队列被其他消费者占用
如果队列正在被其他消费者使用(例如有活跃的连接或未确认的消息),删除操作可能会失败。
解决方法
- 停止消费者:确保没有客户端正在消费该队列。
- 清空队列(可选):
或通过管理界面清空队列。rabbitmqadmin delete queue name=<queue_name>
3. 用户未绑定到正确的虚拟主机
RabbitMQ 支持多虚拟主机(vhost
)。如果用户未绑定到目标队列所在的虚拟主机,也会导致权限拒绝。
检查虚拟主机
列出所有虚拟主机:
rabbitmqctl list_vhosts
解决方法
将用户添加到正确的虚拟主机,并授予权限:
# 添加用户到虚拟主机
rabbitmqctl add_user <username> <password>
rabbitmqctl set_permissions -p <vhost> <username> ".*" ".*" ".*"
相关文章:
RabbitMQ 集群降配
这里写自定义目录标题 摘要检查状态1. 检查 RabbitMQ 服务状态2. 检查 RabbitMQ 端口监听3. 检查 RabbitMQ 管理插件是否启用4. 检查开机自启状态5. 确认集群高可用性6. 检查使用该集群的服务是否做了断开重连 实操1. 负载均衡配置2. 逐个节点降配(滚动操作…...
Git——分布式版本控制工具使用教程
本文主要介绍两种版本控制工具——SVN和Git的概念,接着会讲到Git的安装,Git常用的命令,以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。如果想直接上手用Vscode操作远程仓库则直接看7和9即可! 目录 1. SVN和Git介绍 1.1 …...
在 Offset Explorer 中配置多节点 Kafka 集群的详细指南
一、是否需要配置 Zookeeper? Kafka 集群的 Zookeeper 依赖性与版本及运行模式相关: Kafka 版本是否需要 Zookeeper说明0.11.x 及更早版本✅ 必须配置Kafka 完全依赖 Zookeeper 管理元数据2.8 及以下版本✅ 必须配置Kafka 依赖外置或内置的 Zookeeper …...
nvm 安装某个node.js版本后不能使用或者报错,或不能使用npm的问题
安装了nvm之后发现不能使用某个版本的node.js,报错之后,不能使用npm这个命令。可以这样解决: 1、再node.js官网直接下载node.js 的压缩包。 找到nvm的安装目录 2、直接将文件夹解压到这个安装目录中修改一下名字即可。...
C++20 中的同步输出流:`std::basic_osyncstream` 深入解析与应用实践
文章目录 一、std::basic_osyncstream 的背景与动机二、std::basic_osyncstream 的基本原理三、std::basic_osyncstream 的使用方法(一)基本用法(二)多线程环境下的使用(三)与文件流的结合 四、std::basic_…...
美摄接入DeepSeek等大模型,用多模态融合重构视频创作新边界!
今年以来,DeepSeek凭借其强大的深度推理分析能力,在AI领域掀起新的热潮。美摄科技快速响应市场需求,迅速接入以DeepSeek、通义千问、商汤、文心一言为代表的大模型,为企业视频创作生产带来全新体验。 传统视频创作面临着同质化、…...
Git 使用笔记
参考链接: 创建版本库 - Git教程 - 廖雪峰的官方网站 Git使用教程,最详细,最傻瓜,最浅显,真正手把手教 - 知乎 命令使用 cd f: 切换目录到 F 盘 cd gitCxl 切换目录到 gitCxl 文件夹 mkdir gitCxl 创建新文件…...
C#:深入理解Thread.Sleep与Task.Delay
1.核心区别概述 特性Thread.SleepTask.Delay阻塞类型同步阻塞当前线程异步非阻塞,释放线程适用场景同步代码中的简单延时异步编程中的非阻塞等待资源消耗占用线程资源(线程挂起)不占用线程(通过计时器回调)精度依赖操…...
基于Redis实现共享token登录
文章目录 1.集群下session共享存在的问题2.基于Redis实现共享session存储业务流程图3.具体登录的代码实现3.1 引入redis数据库3.2 发送验证码到前端3.2 登录注册功能实现3.2刷新token有效期(LoginIntereceptor)3.3 MvcConfig配置4.拦截器优化4.1增加RefreshTokenInterceptor 4.…...
【Linux我做主】浅谈Shell及其原理
浅谈Linux中的Shell及其原理 Linux中Shell的运行原理github地址前言一、Linux内核与Shell的关系1.1 操作系统核心1.2 用户与内核的隔离 二、Shell的演进与核心机制2.1 发展历程2.2 核心功能解析2.3 shell的工作流程1. 用户输入命令2. 解析器拆分指令3. 扩展器处理动态内容变量替…...
vulhub/Billu_b0x靶机----练习攻略
1.Billu_b0x靶场下载链接: https://download.vulnhub.com/billu/Billu_b0x.zip 2.下载后,解压出ova文件,直接拖至VMware中,重命名和选择存储位置,点击导入,报错点击重试即可。修改网卡为NAT模式。 打开靶…...
【华为OD-E卷 -121 消消乐游戏 100分(python、java、c++、js、c)】
【华为OD-E卷 - 消消乐游戏 100分(python、java、c++、js、c)】 题目 游戏规则:输入一个只包含英文字母的字符串,字符串中的两个字母如果相邻且相同,就可以消除。 在字符串上反复执行消除的动作,直到无法继续消除为止,此时游戏结束。 输出最终得到的字符串长度 输入描…...
Qt之自定义界面组件 一
通过qt中的painter绘图事件绘制一个电池电量图的变化。效果如下图 创建一个基于界面widget工程,在wdiget界面添加一个widget界面,将添加的widget界面的类提升为Tbattery.在Tbattery类中重写painEvent电池电量代码 文件目录结构 主要部分代码 //Tbattery.cpp #inc…...
破解验证码新利器:基于百度OCR与captcha-killer-modified插件的免费调用教程
破解验证码新利器:基于百度OCR与captcha-killer-modified插件的免费调用教程 引言 免责声明: 本文提供的信息仅供参考,不承担因操作产生的任何损失。读者需自行判断内容适用性,并遵守法律法规。作者不鼓励非法行为,保…...
1-1 MATLAB深度极限学习机
本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏目录,查看更多内容。 参考[1]魏洁.深度极限学习机的研究与应用[D].太原理工大学[2023-10-14].DOI:CNKI:CDMD:2.1016.714596. 目录 0.引言 1.ELM-AE实现 2.DE…...
函数的介绍
1.函数的概念 在C语言中也有函数的概念,有些翻译为:子程序,这种翻译更为准确。C语言的函数就是一个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。 C语言的程序其实是有无数个小的函数组合而成的,也可以…...
4.3--入门知识扫盲,IPv4的头部报文解析,数据报分片,地址分类(包你看一遍全部记住)
IPv4协议:网络世界的快递包裹指南(附拆箱说明书) “IPv4就像一张明信片,既要写清楚地址,又要控制大小别超重” —— 某网络工程师的桌面铭牌 一、IPv4报头:快递面单的终极艺术 1.1 报头结构图(…...
Linux生成自签名证书
一、安装OpenSSL 首先确保机器已安装OpenSSL工具OpenSSL的安装可参考:源码编译OpenSSL 二、生成私钥 openssl genpkey -algorithm RSA -out server.key 三、创建证书签署请求(CSR) openssl req -new -key server.key -out server.csr 四、生成自签…...
烽火HG680-KA_海思HI3798MV310_安卓9.0_U盘强刷固件包及注意点说明
之前发布过这个固件包,关于烽火HG680-KA/HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包详细说明一下,汇总总结一些常遇到的情况,这次固件会分开发布,以免混淆。 上一个帖子地址:https://blog.csdn.net/…...
Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析
Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析 一、Teleport:突破组件层级的时空传送 1.1 实现原理图解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…...
Linux Vim 寄存器 | 从基础分类到高级应用
注:本文为 “vim 寄存器” 相关文章合辑。 英文引文,机翻未校。 中文引文,略作重排。 未整理去重,如有内容异常,请看原文。 Registers 寄存器 Learning Vim registers is like learning algebra for the first ti…...
为什么TCP需要三次握手?一次不行吗?
文章目录 1. 三次握手的过程2. 为什么需要三次握手?3. 握手过程中每一步的具体作用4. 简单比喻5. 为什么是三次握手,而不是两次或四次?6. 三次握手中的序列号有什么作用?7. 总结 1. 三次握手的过程 三次握手是建立 TCP 连接的过程…...
OpenGL ES 入门指南:从基础到实战
引言:为什么需要 OpenGL ES? 在当今的嵌入式设备(如智能手机、汽车仪表盘、智能家居中控屏)中,流畅的图形渲染能力是用户体验的核心。OpenGL ES(OpenGL for Embedded Systems) 作为行业标准&am…...
台达PLC转太网转换的教程案例(台达DVP系列)
产品介绍 台达DVP-PLC自投身工业自动化市场以来,始终致力于创新发展,不断推陈出新。其产品紧密贴合市场需求与行业工艺,凭借卓越性能与丰富功能,深受用户青睐。不仅推出了高效的程序与编辑工具,显著提升了主机执行速度…...
Ubuntu24.10编译Android12源码并运行于模拟器中
效果如下: 初始化环境: 运行lunch弹出对应目标 生成模拟器版本镜像 镜像生成成功 生成模拟器启动镜像 编译注意事项: 24.10版本: sudo apt install curl curl -sSL https://gerrit-googlesource.proxy.ustclug.org/git-repo//master/r…...
Java面试易忽略知识点
1. CompletableFuture中thenApply()与thenCompose()的区别 考察点:组合式异步编程 解析: **thenApply()**:接收前序任务结果,返回普通对象(同步转换),适用简单数据处理。**thenCompose()*…...
C#通过SignalR直接返回流式响应内容
1、背景 实现流式响应基本上分为两大技术方案:(1)基于HTTP的Stream处理;(2)基于socket的连接。前者的实现方式有:《C#通过API接口返回流式响应内容—SSE方式》和《C#通过API接口返回流式响应内…...
【排序算法对比】快速排序、归并排序、堆排序
排序算法对比:快速排序、归并排序、堆排序 1. 快速排序(Quick Sort) 原理 快速排序采用 分治法(Divide and Conquer),通过选取基准值(pivot),将数组划分为 小于基准值…...
YOLO11改进-模块-引入空间带状注意力机制(Spatial Strip Attention,SSA)增强模型对空间信息处理能力的重要模块
在图像相关任务中,传统卷积神经网络(CNN)在处理空间信息时,卷积核的感受野有限,难以有效捕捉长距离的空间依赖关系。而自注意力机制虽然能建模长距离依赖,但计算复杂度较高。为了在高效计算的同时更好地捕捉…...
C++内存分配方式
文章目录 1、静态内存分配2、栈内存分配3、堆内存分配4、内存池分配5、placement new语法工作原理示例 placement new应用场景 在C 中,内存分配主要有以下几种方式: 1、静态内存分配 特点:在编译时就确定了内存的分配和释放,内存…...
【经验】Orin系列Ubuntu远程桌面:VNC、NoMachine、URDC
1、VNC 1.1 Ubuntu端 1)安装VNC服务器 sudo apt install tigervnc-standalone-server2)安装xfce4 桌面 xfce4 用资源较GNOME ,KDE较少。适合老机器,轻量级桌面。与windows界面环境类似。 sudo apt install xfce4 xfce4-goodies也可以使用其它的桌面系统,可以使用如下命…...
【RabbitMQ】RabbitMQ消息的重复消费问题如何解决?
可以从消息队列和消费者两方面入手,确保消息处理的幂等性和可靠性。 1.消息重复消费的原因 1.1消息队列的机制 消息确认失败: 消费者处理完消息后,未正确发送确认(ACK)给RabbitMQ,导致消息被重新投递。消息重试机制:…...
Python、MATLAB和PPT完成数学建模竞赛中的地图绘制
参加数学建模比赛时,很多题目——诸如统计类、数据挖掘类、环保类、建议类的题目总会涉及到地理相关的情景,往往要求我们制作与地图相关的可视化内容。如下图,这是21年亚太赛的那道塞罕坝的题目,期间涉及到温度、降水和森林覆盖率…...
Git 分支删除操作指南(含本地与远程)
🚀 Git 分支删除操作指南(含本地与远程) 在多人协作的开发过程中,定期清理已合并的临时分支(如 feature/*、bugfix/*、hotfix/* 等)可以保持仓库整洁,避免混乱。 📌 分支命名规范回…...
视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决
视频推拉流EasyDSS视频直播点播平台可提供一站式的视频转码、点播、直播、视频推拉流、播放H.265视频等服务,搭配RTMP高清摄像头使用,可将无人机设备的实时流推送到平台上,实现无人机视频推流直播、巡检等应用。 有用户反馈,项目现…...
v-model+computed实现父子组件数据传递和同步
v-modelcomputed实现父子组件数据传递和同步 1. 父组件2. 子组件说明总结 1. 父组件 <template><div><span>父子组件传值:{{countRef}}<my-counter v-modelcount></my-counter></span></div> </template> <scr…...
一键秒连WiFi智能设备,uni-app全栈式物联开发指南。
如何使用 uni-app 框架实现通过 WiFi 连接设备并进行命令交互的硬件开发。为了方便理解和实践,我们将提供相应的源代码示例,帮助开发者快速上手。 1. 硬件准备 在开始之前,请确保你已经准备好以下硬件设备: 支持 WiFi 连接的设备…...
关于Docker是否被淘汰虚拟机实现连接虚拟专用网络Ubuntu 22.04 LTS部署Harbor仓库全流程
1.今天的第一个主题: 第一个主题是关于Docker是否真的被K8S弃用,还是可以继续兼容,因为我们知道在去年的时候,由于不可控的原因,docker的所有国内镜像源都被Ban了,再加上K8S自从V1.20之后,宣布…...
【C++】动态规划从入门到精通
一、动态规划基础概念详解 什么是动态规划 动态规划(Dynamic Programming,DP)是一种通过将复杂问题分解为重叠子问题,并存储子问题解以避免重复计算的优化算法。它适用于具有以下两个关键性质的问题: 最优子结构&…...
【专栏预告】《VR 360°全景视频开发:从GoPro到Unity VR眼镜应用实战》
【专栏预告】每周天12:00更新,欢迎指导与交流。 专栏地址:《VR 360全景视频开发:从GoPro到Unity VR眼镜应用实战》 前言 随着VR技术的不断发展,360全景视频的需求也在逐年增长。尤其是在VR眼镜端,360全景视频带来了…...
【leetcode100】搜索插入位置
1、题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2…...
Java面试黄金宝典3
1. 什么是 NIO 原理 缓冲区(Buffer): 它是一个线性的、有限的基本数据元素序列,本质上是一块内存区域,被包装成了一个对象,以便于进行高效的数据读写操作。不同类型的基本数据都有对应的Buffer子类…...
vue3 报错 Could not find a declaration file for module ‘/App.vue‘
vue3 报错 Could not find a declaration file for module /App.vue.app.vue路径.js implicitly has an any type 问题描述原因分析:解决方案: 问题描述 Could not find a declaration file for module /App.vue.app.vue路径.js implicitly has an any …...
linux对串口设备文件进行重命名(删除、重建)
0.前言 最近在弄3562的自制板,有很多串口,然后发现设备文件名编号有些跳跃,不方便用户使用,因此,需要对这些设备文件进行重命名 1.查看设备号 我们需要知道目标设备文件的设备号,通过ls -l /dev/tty*查看…...
Linux内核传输层UDP源码分析
一、用户数据包协议(UDP) 1.UDP数据报头 UDP 提供面向消息的不可靠传输,但没有拥塞控制功能。很多协议都使用 UDP,如用于 IP 网络传输音频和视频的实时传输协议 (Real-time Transport Protocol,RTP),此类型…...
GitHub 超火的开源终端工具——Warp
Warp 作为近年来 GitHub 上备受瞩目的开源终端工具,以其智能化、高性能和协作能力重新定义了命令行操作体验。以下从多个维度深入解析其核心特性、技术架构、用户评价及生态影响力: 一、背景与核心团队 Warp 由前 GitHub CTO Jason Warner 和 Google 前…...
【Java基础巩固系列】异常
业务背景 业务开发中,总会遇到代码出现异常的情况,不合理的异常处理或不处理异常除了影响业务功能和中断业务功能外,还会增加排查问题的难度。所以我们要学会正确的使用异常处理。合理的异常处理能减少很多潜在的问题,是提高代码…...
sass介绍
1、Sass简介 Sass 是一种 CSS 的预编译语言。它提供了 变量(variables)、嵌套(nested rules)、 混合(mixins)、 函数(functions)等功能,并且完全兼容 CSS 语法。Sass 能…...
第1章:云原生时代:容器技术的发展历程与核心价值
第1章:云原生时代:容器技术的发展历程与核心价值 作者:DogDog_Shuai 阅读时间:约15分钟 难度:入门级 目录 1. 引言2. 容器技术的发展历程3. 容器技术的核心价值4. 云原生时代的机遇与挑战5. 总结1. 引言...
软考程序员考试知识点汇总
软考程序员考试(初级资格)主要考察计算机基础理论、编程能力及软件开发相关知识。以下是核心知识点总结及备考建议: 一、计算机基础 数制与编码 二进制、八进制、十进制、十六进制转换原码、反码、补码表示(整数与浮点数…...