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

RocketMQ 深度解析:架构设计与最佳实践

在分布式系统架构日益复杂的今天,消息中间件作为系统间通信的桥梁,扮演着至关重要的角色。RocketMQ 作为阿里开源的高性能分布式消息中间件,凭借其卓越的性能、丰富的功能以及高可用性,在电商、金融、互联网等众多领域得到广泛应用。本文将从核心概念、消息收发流程、高级特性、集群部署、监控运维等多个维度,深入解析 RocketMQ 的架构设计与最佳实践,助力开发者更好地掌握和应用这一强大的消息中间件。

一、RocketMQ 核心概念

RocketMQ 架构清晰,由多个核心组件协同工作,共同实现消息的高效处理。

1.1 核心组件

组件角色说明关键特性
NameServer轻量级注册中心,负责存储 Broker 的元数据信息,如 Broker 地址、Topic 与队列的映射关系等无状态设计,采用 AP(可用性、分区容错性)原则,支持集群部署,保障高可用
Broker消息存储与转发的核心服务器,承担着消息的接收、存储、转发等关键任务采用主从架构,支持同步 / 异步复制模式,确保数据的可靠性与高可用性
Producer消息生产者,负责将业务消息发送到 RocketMQ 集群支持同步、异步、单向等多种发送模式,满足不同业务场景的需求
Consumer消息消费者,从 RocketMQ 集群中获取并处理消息提供 Push 和 Pull 两种消费模式,支持集群消费和广播消费两种模式,灵活适配各类业务逻辑

1.2 核心概念

  • Topic:消息的逻辑分类,类似于数据库中的表,用于将不同类型的消息进行区分和管理 。
  • Message Queue:Topic 的分区,是 RocketMQ 实现并行处理的基础单元,通过对 Topic 进行分区,能够提高消息处理的并发度 。
  • Tag:消息的二级分类,在 Topic 的基础上进一步细化消息类别,支持基于 Tag 的消息过滤,方便消费者按需获取消息 。
  • Offset:消息在队列中的位置标识,用于记录消费者消费消息的进度,确保消息的有序消费和准确处理 。
  • Consumer Group:一组具有相同消费逻辑的消费者集合,同一 Consumer Group 内的消费者共同消费 Topic 中的消息,通过负载均衡的方式提高消息处理效率 。

二、消息收发核心流程(Java 示例)

2.1 生产者发送消息

以下是使用 Java 代码实现生产者发送消息的示例:

public class ProducerDemo {public static void main(String[] args) throws Exception {// 创建 DefaultMQProducer 实例,并指定生产者组名DefaultMQProducer producer = new DefaultMQProducer("ProducerGroup");// 设置 NameServer 地址producer.setNamesrvAddr("127.0.0.1:9876");// 启动生产者producer.start();// 创建消息实例,指定 Topic、Tag 和消息内容Message msg = new Message("OrderTopic", "PaySuccess", "202307200001".getBytes());// 同步发送消息,并获取发送结果SendResult result = producer.send(msg);System.out.println("发送结果:" + result);// 关闭生产者producer.shutdown();}
}

2.2 消费者订阅消息

使用 Java 实现消费者订阅并消费消息的示例代码如下:

public class ConsumerDemo {public static void main(String[] args) throws Exception {// 创建 DefaultMQPushConsumer 实例,并指定消费者组名DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ConsumerGroup");// 设置 NameServer 地址consumer.setNamesrvAddr("127.0.0.1:9876");// 订阅 Topic,并指定消息过滤表达式consumer.subscribe("OrderTopic", "PaySuccess || Refund");// 注册消息监听器,处理接收到的消息consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {for (MessageExt msg : msgs) {System.out.println("收到消息:" + new String(msg.getBody()));}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;});// 启动消费者consumer.start();}
}

三、高级特性解析

3.1 事务消息实现

RocketMQ 的事务消息机制确保了本地事务与消息发送的一致性,以下是事务消息的实现示例:

public class TransactionProducer {public static void main(String[] args) throws Exception {// 创建 TransactionMQProducer 实例,并指定事务生产者组名TransactionMQProducer producer = new TransactionMQProducer("TransactionGroup");// 设置事务监听器,处理本地事务和事务状态检查producer.setTransactionListener(new TransactionListener() {@Overridepublic LocalTransactionState executeLocalTransaction(Message msg, Object arg) {// 执行本地事务return LocalTransactionState.UNKNOW;}@Overridepublic LocalTransactionState checkLocalTransaction(MessageExt msg) {// 检查本地事务状态return LocalTransactionState.COMMIT_MESSAGE;}});// 创建消息实例Message msg = new Message("PayTopic", "支付事务消息".getBytes());// 发送事务消息producer.sendMessageInTransaction(msg, null);}
}

3.2 顺序消息保证

在某些业务场景下,需要保证消息的顺序性,RocketMQ 提供了完善的顺序消息解决方案:

// 生产者:指定队列选择器,确保同一业务的消息发送到同一队列
producer.send(msg, new MessageQueueSelector() {@Overridepublic MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {Long orderId = (Long) arg;int index = (int) (orderId % mqs.size());return mqs.get(index);}
}, orderId);// 消费者:注册顺序消息监听器,按顺序消费消息
consumer.registerMessageListener(new MessageListenerOrderly() {@Overridepublic ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {// 保证同一队列顺序处理return ConsumeOrderlyStatus.SUCCESS;}
});

四、集群部署方案

4.1 多 Master 多 Slave 模式(推荐)

多 Master 多 Slave 模式具有高可用性和数据冗余的特点,适合生产环境部署:

# 启动NameServer集群
nohup sh bin/mqnamesrv &# 启动Broker-A Master
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &# 启动Broker-B Slave
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &

4.2 配置文件示例(broker-a.properties)

brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
storePathRootDir=/data/rocketmq/store-a

五、监控与运维

5.1 控制台部署

通过 RocketMQ 控制台可以方便地监控和管理集群,部署命令如下:

java -jar rocketmq-dashboard-1.0.0.jar --server.port=8080 
--rocketmq.config.namesrvAddr=127.0.0.1:9876

5.2 关键监控指标

指标类别监控项告警阈值
BrokerPageCache 未命中率>30%
Producer发送耗时 (P99)>500ms
Consumer堆积消息数>10000
系统CPU 使用率>80% 持续 5 分钟

六、常见问题解决方案

6.1 消息堆积处理

当出现消息堆积时,可以采取以下措施进行处理:

  1. 扩容 Consumer:增加消费者实例数量,提高消息消费能力 。
  2. 提高消费并行度:调整 consumeThreadMin 和 consumeThreadMax 参数,增加消费线程数量 。
  3. 跳过非关键消息:通过设置消费进度 offset,跳过不重要的消息,优先处理关键消息 。
  4. 开启限流策略:设置 pullThresholdForQueue 参数,对消息拉取进行限流,避免系统负载过高 。

6.2 消息重复消费

为解决消息重复消费问题,可以采用以下方案:

  1. 接口幂等设计:在业务接口中使用唯一键和状态机,确保相同操作只执行一次 。
  2. Redis 去重:利用 Redis 的缓存特性,为每条消息生成唯一指纹,并设置过期时间,避免重复处理 。
  3. 数据库唯一索引:在数据库表中添加唯一索引,对关键业务操作进行约束,防止重复数据插入 。

七、性能优化实践

7.1 存储优化

通过调整 RocketMQ 的存储配置,可以提升存储性能:

# 开启瞬态CommitLog池
transientStorePoolEnable=true
# 调整MappedFile大小
mapedFileSizeCommitLog=1073741824
# 开启堆外内存缓存
transferMsgByHeap=false

7.2 网络优化

在生产端和消费端进行合理的网络参数设置,能够提高消息传输效率:

// 生产端设置
producer.setCompressMsgBodyOverHowmuch(1024*4); // 4K以上压缩
producer.setSendMsgTimeout(3000); // 发送超时3秒// 消费端设置
consumer.setPullBatchSize(32);    // 每次拉取32条
consumer.setConsumeMessageBatchMaxSize(10); // 批量消费10条

八、RocketMQ 5.x 新特性

8.1 轻量级 Proxy 模式

RocketMQ 5.x 引入了轻量级 Proxy 模式,简化了客户端与 Broker 的交互,提高了系统的灵活性:

# 启动Proxy服务
nohup sh bin/mqproxy &

8.2 消息轨迹增强

通过增强消息轨迹功能,能够更方便地追踪消息的流转过程:

# 开启详细轨迹跟踪
traceTopicEnable=true
traceTopicName=RMQ_SYS_TRACE_TOPIC

8.3 多协议支持

RocketMQ 5.x 支持多种协议,拓展了应用场景:

  • gRPC:提供跨语言客户端支持,方便不同语言的应用接入 。
  • HTTP REST:便于前端应用通过 HTTP 协议调用 RocketMQ 接口 。
  • MQTT:适用于物联网等场景,满足低功耗、高并发的消息传输需求 。

九、生产环境最佳实践

9.1 命名规范

规范的命名有助于提高系统的可读性和可维护性:

  • Topic 命名:采用 “业务_子业务_类型” 的格式,如 ORDER_PAY_NOTIFY 。
  • Group 命名:遵循 “应用名_功能” 的规则,如 PAYMENT_CONSUMER 。

9.2 容量规划

合理的容量规划能够确保系统在高并发场景下稳定运行:

  • 单 Topic 队列数:生产环境中建议设置为 16 - 64 个,根据业务流量进行调整 。
  • 磁盘预留:为 CommitLog 目录预留 50% 的磁盘空间,防止磁盘写满导致服务异常 。

9.3 灾备方案

完善的灾备方案是保障系统高可用性的关键:

  • 同城双活:基于 Dledger 实现跨机房数据同步,确保在机房故障时业务不中断 。
  • 异地容灾:定期备份 offset 和消息数据,在发生重大灾难时能够快速恢复业务 。

十、同类产品对比

特性RocketMQKafkaRabbitMQ
吞吐量10w+/s100w+/s5w+/s
延迟毫秒级毫秒级微秒级
事务消息支持不支持不支持
消息回溯支持支持不支持
协议支持自定义协议自定义协议AMQP

结语

RocketMQ 作为一款优秀的分布式消息中间件,在电商、金融等众多领域展现出强大的实力。要深入掌握 RocketMQ,建议从以下几个维度着手:

  1. 核心机制:深入理解 RocketMQ 的存储设计、消息投递保证等核心机制,为应用开发奠定坚实基础 。
  2. 运维体系:建立完善的监控告警机制,做好容量规划和灾备方案,确保系统稳定运行 。
  3. 生态整合:学习如何将 RocketMQ 与 Spring Cloud 等框架进行集成,充分发挥其在生态系统中的作用 。
  4. 源码研究:通过阅读 RocketMQ 的源码,深入了解 NameServer 路由机制、Broker 存储模型等实现细节,提升技术水平 。

推荐学习路径:从单机部署开始,逐步进行集群搭建、特性验证、生产压测,最终深入研究源码,全面掌握 RocketMQ 的技术精髓 。

本文基于 RocketMQ 5.1.1 版本进行验证,更多技术细节请参考官方文档。在使用过程中如有疑问,欢迎在评论区交流讨论,让我们共同探索 RocketMQ 的强大功能!

相关文章:

RocketMQ 深度解析:架构设计与最佳实践

在分布式系统架构日益复杂的今天&#xff0c;消息中间件作为系统间通信的桥梁&#xff0c;扮演着至关重要的角色。RocketMQ 作为阿里开源的高性能分布式消息中间件&#xff0c;凭借其卓越的性能、丰富的功能以及高可用性&#xff0c;在电商、金融、互联网等众多领域得到广泛应用…...

【Light】帕多瓦大学超表面技术:开启矢量光束相位偏振定制新时代

01 前言 近年来&#xff0c;完美涡旋光束&#xff08;Perfect Vortex Beams&#xff09;因其独特的环形强度分布和与拓扑电荷无关的特性&#xff0c;成为研究热点。然而&#xff0c;传统方法在生成此类光束时面临相位和偏振控制的挑战&#xff0c;通常需要复杂的光学系统或多重…...

2021-11-15 C++下一个生日天数

缘由c今日日期到生日天数-编程语言-CSDN问答 int isLeap(int year)//判断闰年 {//缘由https://ask.csdn.net/questions/7567048?spm1005.2025.3001.5141return ((!(year % 4) && year % 100) || !(year % 400)); } int daysInMonth(int year, int month)//返回月天数…...

基于nodejs + Koa +Nuxt3的订单系统项目实战

以下是一个基于 Node.js Koa Nuxt3 的订单系统项目实战指南&#xff0c;包含关键实现步骤和代码示例&#xff1a; 一、项目架构设计 project/ ├── backend/ # Koa 后端 │ ├── config/ # 配置文件 │ ├── controllers/ # 控制器 │ ├──…...

# YOLOv2:目标检测的升级之作

YOLOv2&#xff1a;目标检测的升级之作 在目标检测领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法以其高效的速度和创新的检测方式受到了广泛关注。今天&#xff0c;我们就来深入探讨一下 YOLOv2&#xff0c;看看它是如何在继承 YOLOv1 的基础上进行…...

国债收益率、需求与抛售行为的逻辑解析

国债收益率、需求与抛售行为的逻辑解析 1. 国债收益率的定义 国债收益率是衡量国债投资回报的核心指标&#xff0c;分为两种常见计算方式&#xff1a; 当前收益率&#xff08;Current Yield&#xff09;&#xff1a;年利息收入 债券当前市场价格 例如&#xff1a;面值100元、…...

使用Python和TensorFlow实现图像分类的人工智能应用

最近研学过程中发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...

嵌入式培训之C语言学习完(十七)结构体、共用体、枚举、typedef关键字与位运算

目录 一、结构体&#xff08;struct关键字&#xff09; &#xff08;一&#xff09;声明一个结构体数据类型 &#xff08;二&#xff09;结构体的成员初始化与赋值 a、结构体变量赋值 b、结构体成员初始化 c、结构体的定义形式 &#xff08;三&#xff09;考点&#xff…...

cilium路由模式和aws-eni模式下的IPAM

来看Cilium路由的几种核心模式。 封装模式&#xff08;overlay&#xff09; 首先是最基础的封装模式。这是默认情况下&#xff0c;如果你没有特别配置&#xff0c;Cilium会自动运行的模式。它的最大特点就是对底层网络环境的要求非常低&#xff0c;可以说是开箱即用。具体怎么…...

深入理解 Java 代理模式:从基础到实战​

在软件开发的世界里&#xff0c;设计模式是程序员智慧的结晶&#xff0c;它们为解决常见问题提供了经过验证的最佳实践。代理模式作为一种常用的结构型设计模式&#xff0c;在 Java 开发中有着广泛的应用。本文将深入探讨 Java 代理模式&#xff0c;从基本概念、分类、实现原理…...

Python毕业设计219—基于python+Django+vue的房屋租赁系统(源代码+数据库+万字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于pythonDjangovue的房屋租赁系统(源代码数据库万字论文)219 一、系统介绍 本项目前后端分离&#xff0c;分为租客、房东、管理员三种角色 1、租客&#xff1a; 注册、登录、公…...

Spring Boot 框架概述

1. 简介 Spring Boot 是由 Pivotal 团队开发的一个用于简化 Spring 应用开发的框架。它通过提供默认配置、嵌入式服务器和自动配置等特性&#xff0c;让开发者能够更快速地构建独立的、生产级别的 Spring 应用。 Spring Boot 的主要特点包括&#xff1a; 快速创建独立的 Spri…...

MySQL 8.0(主从复制)

MySQL 8.0 的 主从复制&#xff08;Master-Slave Replication&#xff09; 是一种数据库高可用和数据备份的核心技术&#xff0c;下面用 一、什么是主从复制&#xff1f; 就像公司的「领导-秘书」分工&#xff1a; 主库&#xff08;Master&#xff09;&#xff1a;负责处理所…...

探索大型语言模型的 LLM 安全风险和 OWASP 十大漏洞

大型语言模型 (LLM) 引领着技术进步,推动着包括医疗保健在内的各个领域的自动化进程。在 Halodoc,我们通过 AI 驱动技术的运用直接见证了这一变化。然而,强大的功能伴随着同样重大的责任——保障这些系统的安全对于保护敏感信息和维护信任至关重要。本博客探讨了与 LLM 相关…...

算法与数据结构 - 二叉树结构入门

目录 1. 普通二叉树结构 1.1. 常见术语 1.2. 完全二叉树 (Complete Binary Tree) 1.3. 满二叉树 (Full Binary Tree) 2. 特殊二叉树结构 2.1. 二叉搜索树 (BST) 2.1.1. BST 基本操作 - 查找 2.1.2. BST 基本操作 - 插入 2.1.3. BST 基本操作 - 删除 2.2. 平衡二叉树…...

基于AQS实现Reentrantlcok

好久没有更新了 这次来补充上一次AQS还没有实现的可重入锁部分&#xff01; 我们知道ReentrantLock是可重入的锁&#xff0c;主要的核心是state&#xff0c;他是一个原子性的整数&#xff0c;我们只需要将获取锁的代码boolean由false到true变成0->1即可完成。在完成删除逻辑…...

TiDB预研-分页查询、连接查询、执行计划

目录 分页查询原理连接查询原理查询计划分析 https://docs.pingcap.com/zh/tidb/stable/dev-guide-join-tables/ https://cn.pingcap.com/blog/tidb-query-optimization-and-tuning-1/ https://github.com/pingcap/blog-cn/blob/master/how-to-use-tidb.md 分页查询 深分…...

五、【LLaMA-Factory实战】模型部署与监控:从实验室到生产的全链路实践

【LLaMA-Factory实战】模型部署与监控&#xff1a;从实验室到生产的全链路实践 一、引言 在大模型应用落地过程中&#xff0c;从实验室研究到生产环境部署存在巨大挑战。本文基于LLaMA-Factory框架&#xff0c;详细介绍大模型部署与监控的完整流程&#xff0c;包含推理优化、…...

Unity 点击按钮,打开 Windows 文件选择框,并加载图片

代码如下&#xff1a; using System; using System.Collections; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.UI;/// <summary> /// 文件日志类 /// </summary> // […...

深入解析磁盘 I/O 与零拷贝技术:从传统读取到高效传输

深入解析磁盘 I/O 与零拷贝技术&#xff1a;从传统读取到高效传输 在现代计算机系统中&#xff0c;磁盘 I/O 操作是数据处理的核心环节之一。无论是读取文件、写入数据&#xff0c;还是进行网络传输&#xff0c;磁盘 I/O 的效率直接影响到系统的整体性能。本文将深入探讨磁盘 I…...

第十六章,网络型攻击防范技术

网络攻击介绍 网络攻击 --- 指的是入侵或破坏网络上的服务器 ( 主机 ) &#xff0c;盗取服务器的敏感数据或占用网络带宽。 网络攻击分类&#xff1a; 流量型攻击 网络层攻击 应用层攻击 单包攻击 畸形报文攻击 --- 向目标主机发送有缺陷的IP报文&#xff0c;使得目标在…...

线程的生命周期·

知识点详细说明 Java线程的生命周期由Thread.State枚举明确定义,包含以下6种状态: 1. 新建状态(NEW) 定义:线程对象被创建后,但未调用start()方法。特点: 未分配系统资源(如CPU时间片)。可通过Thread.getState()获取状态为NEW。示例:Thread t = new Thread(); // 状…...

kafka 面试总结

Kafka的幂等性是一种机制&#xff0c;确保生产者发送的每条消息在Broker端只被持久化一次&#xff0c;即使生产者因网络问题等原因重试发送&#xff0c;也不会导致消息重复。 实现原理 生产者ID&#xff08;PID&#xff09; 每个生产者实例在初始化时&#xff0c;会被分配一个…...

Webpack基本用法学习总结

Webpack 基本使用核心概念处理样式资源步骤&#xff1a; 处理图片资源修改图片输出文件目录 自动清空上次打包的内容EslintBabel处理HTML资源搭建开发服务器生产模式提取css文件为单独文件问题&#xff1a; Css压缩HTML压缩 小结1高级SourceMap开发模式生产模式 HMROneOfInclud…...

5月9日复盘-混合注意力机制

5月9日复盘 四、混合注意力 混合注意力机制&#xff08;Hybrid Attention Mechanism&#xff09;是一种结合空间和通道注意力的策略&#xff0c;旨在提高神经网络的特征提取能力。 1. CBAM Convolution Block Attention Module &#xff0c;卷积块注意力模块 论文地址&…...

YOLOv8 优化:基于 Damo-YOLO 与 DyHead 检测头融合的创新研究

文章目录 YOLOv8 的背景与发展Damo-YOLO 的优势与特点DyHead 检测头的创新之处融合 Damo-YOLO 与 DyHead 检测头的思路融合后的模型架构融合模型的代码实现导入必要的库定义 Damo-YOLO 的主干网络定义特征金字塔网络&#xff08;FPN&#xff09;定义 DyHead 检测头定义融合后的…...

【网安播报】Meta 推出 LlamaFirewall开源框架以阻止 AI 越狱、注入和不安全代码

1、Meta 推出 LlamaFirewall 框架以阻止 AI 越狱、注入和不安全代码 Meta 宣布推出 LlamaFirewall&#xff0c;这是一个开源框架&#xff0c;旨在保护人工智能 &#xff08;AI&#xff09; 系统免受新出现的网络风险&#xff0c;例如提示词注入、越狱和不安全代码等。除了 Llam…...

QT 解决msvc fatal error C1060: 编译器的堆空间不足

一.物理内存太小&#xff0c;代码又比较复杂&#xff0c;递归嵌套之类的。 1.修改虚拟内存的大小&#xff0c;一般设置为物理内存的1.5倍。 二.msvc工程的编译默认开启的是多线程编译&#xff0c;所以电脑内存确实不够&#xff0c;采用如下设置。 QMAKE_CXXFLAGS -j1 三.ms…...

PX4开始之旅(一)自动调参

核心知识点&#xff1a;无人机震动与滤波参数 1. 通俗易懂的解释 想象一下&#xff0c;你的无人机就像一个非常敏感的“听众”&#xff0c;它的“耳朵”就是陀螺仪和加速度计这些传感器&#xff0c;用来感知自己是如何移动和旋转的。理想情况下&#xff0c;它应该只“听”到你…...

C++ 中 lower_bound 与 upper_bound 函数详解

C 中 lower_bound 与 upper_bound 函数详解 文章目录 C 中 lower_bound 与 upper_bound 函数详解**一、核心定义与区别****二、使用条件与时间复杂度****三、实际应用场景****四、注意事项与常见误区****五、代码示例****六、总结** 一、核心定义与区别 lower_bound 作用&#…...

minio数据迁移(两台服务器没法相互通信)

场景描述: A服务器 无法访问 B服务器&#xff0c;B服务器 也无法访问 A&#xff08;即双方都不能通过公网或内网直连对方&#xff09; MinIO 官方提供了 mc&#xff08;MinIO Client&#xff09;命令行工具&#xff0c;可以直接实现 Bucket 之间的数据迁移&#xff1a; 安装 …...

O2OA(翱途)开发平台系统安全-用户登录IP限制

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]支持对指定的用户设置可以连接的客户端计算机的IP地址&#xff0c;以避免用户在不安全的环境下访问系统。本篇主要介绍如何开启O2OA用户登录IP限制。 一、先决条件&#xff1a; 以拥有管理员权限的用户账号登录O2OA(翱途)开发平…...

CSS flex:1

在 CSS 中&#xff0c;flex: 1 是一个用于弹性布局&#xff08;Flexbox&#xff09;的简写属性&#xff0c;主要用于控制 flex 项目&#xff08;子元素&#xff09;如何分配父容器的剩余空间。以下是其核心作用和用法&#xff1a; 核心作用 等分剩余空间&#xff1a;让 flex …...

OpenHarmony平台驱动开发(十一),PIN

OpenHarmony平台驱动开发&#xff08;十一&#xff09; PIN 概述 功能简介 PIN即管脚控制器&#xff0c;用于统一管理各SoC的管脚资源&#xff0c;对外提供管脚复用功能。 基本概念 PIN是一个软件层面的概念&#xff0c;目的是为了统一对各SoC的PIN管脚进行管理&#xff0…...

.NET高频技术点(持续更新中)

1. .NET 框架概述 .NET 框架的发展历程.NET Core 与 .NET Framework 的区别.NET 5 及后续版本的统一平台 2. C# 语言特性 异步编程&#xff08;async/await&#xff09;LINQ&#xff08;Language Integrated Query&#xff09;泛型与集合委托与事件属性与索引器 3. ASP.NET…...

Spring Cloud - 2( 12000 字详解 Spring Cloud)

一&#xff1a;服务注册和服务发现 - Eureka 1.1 背景 在上一章节的例子中&#xff0c;我们可以看到远程调用时 URL 被硬编码&#xff0c;这导致在更换机器或新增机器时&#xff0c;相关的 URL 需要进行相应的变更。这就需要让所有相关服务去修改 URL&#xff0c;随之而来的就…...

解决Win11下MySQL服务无法开机自启动问题

问题描述 在win11系统中&#xff0c;明明将MySQL服务设置成了自动启动&#xff0c;但在重启电脑后MySQL服务还是无法自动启动&#xff0c;每次都要重新到计算机管理的服务中找到服务再手动启动。 解决方式 首先确保mysql服务的启动类型为自动。 设置方法&#xff1a;找到此电…...

RGB矩阵照明系统详解及WS2812配置指南

RGB矩阵照明系统详解及WS2812配置指南 一、RGB矩阵照明简介 RGB矩阵照明是一种强大的功能&#xff0c;允许使用外部驱动器驱动的RGB LED矩阵为键盘增添绚丽的灯光效果。该系统与RGBLIGHT功能无缝集成&#xff0c;因此您可以使用与RGBLIGHT相同的键码来控制它&#xff0c;操作…...

全球首款无限时长电影生成模型SkyReels-V2本地部署教程:视频时长无限制!

一、简介 SkyReels-V2 模型集成了多模态大语言模型&#xff08;MLLM&#xff09;、多阶段预训练、强化学习以及创新的扩散强迫&#xff08;Diffusion-forcing&#xff09;框架&#xff0c;实现了在提示词遵循、视觉质量、运动动态以及视频时长等方面的全面突破。通过扩散强迫框…...

代理ARP与传统ARP在网络通信中的应用及区别研究

一些问题 路由器隔离广播域&#xff0c;每个接口/网段都是独立的广播域ARP请求是二层广播包&#xff0c;广播包没法通过路由器ARP请求没法穿越互联网到达目标主服务器 一些思考 电脑访问互联网服务器的时候&#xff0c;ARP询问的内容&#xff0c;真的是访问服务器么&#xf…...

理解 Envoy 的架构

理解 Envoy 的架构对于深入理解 Istio 至关重要&#xff0c;因为 Envoy 是 Istio 数据平面的核心。Envoy 是一个高性能的 C 分布式代理&#xff0c;设计为云原生应用和大规模微服务架构的网络基础。 以下是 Envoy 架构的关键组成部分和核心理念&#xff1a; 核心设计理念&…...

使用Kotlin Flow实现Android应用的响应式编程

在Android应用中使用Kotlin Flow实现响应式编程可以分为以下步骤&#xff0c;结合最佳实践和生命周期管理&#xff1a; 1. 添加依赖 在build.gradle中确保包含协程和生命周期相关依赖&#xff1a; dependencies {implementation("org.jetbrains.kotlinx:kotlinx-corouti…...

【AI提示词】蝴蝶效应专家

提示说明 一位专注于分析和优化蝴蝶效应现象的专业人士&#xff0c;擅长将微小变化转化为系统级影响的研究者。 提示词 # Role: 蝴蝶效应专家## Profile - language: 中文 - description: 一位专注于分析和优化蝴蝶效应现象的专业人士&#xff0c;擅长将微小变化转化为系统级…...

StreamRL:弹性、可扩展、异构的RLHF架构

StreamRL&#xff1a;弹性、可扩展、异构的RLHF架构 大语言模型&#xff08;LLMs&#xff09;的强化学习&#xff08;RL&#xff09;训练正处于快速发展阶段&#xff0c;但现有架构存在诸多问题。本文介绍的StreamRL框架为解决这些难题而来&#xff0c;它通过独特设计提升了训…...

架构进阶:大型制造业企业数据架构顶层设计总体规划方案【附全文阅读】

本文概述了一个大型企业数据架构设计的总体规划方案,针对当前数据架构与管理中存在的诸多问题,如缺乏统一数据模型、数据分析应用体系不健全、主数据管理体系不完善、数据治理体系缺失等,提出了明确的改进目标与实施路径。 数据架构设计思路聚焦于明确数据分布和流向…...

前端指南——项目代码结构解析(React为例)

文件结构 文件项目 ├── doc │ ├── technology.md ├── node_modules ├── public ├── shell ├── src │ ├── auto-generated │ │ ├── apis │ │ ├── models │ ├── components │ │ ├── 组件A │ │ ├── 组件B …...

Redis-数据一致性问题与解决方案

Redis-数据一致性问题与解决方案 引言 Redis 是一个高性能的内存数据库&#xff0c;广泛应用于缓存、会话存储、实时分析等场景。作为一个 NoSQL 数据库&#xff0c;它的高性能和丰富的数据结构使其成为现代微服务架构中不可或缺的组件。然而&#xff0c;在高并发的环境下&am…...

【数据结构】算法的复杂度

前言&#xff1a;经过了C语言的学习&#xff0c;紧接着就步入到数据结构的学习了。在C语言阶段我们在写大多数的oj题的时候会遇到一些问题&#xff0c;就是算法的效率低使用的时间较多&#xff0c;占用的空间也多&#xff0c;数据结构就是来优化算法的。 文章目录 一&#xff…...

Leetcode刷题 由浅入深之字符串——541. 反转字符串Ⅱ

目录 &#xff08;一&#xff09;反转字符串Ⅱ的C实现 写法一&#xff08;s.begin&#xff08;&#xff09;遍历字符&#xff09; &#xff08;二&#xff09;复杂度分析 时间复杂度 空间复杂度 &#xff08;三&#xff09;总结 【题目链接】541. 反转字符串Ⅱ - 力扣&am…...

制造单元智能化改造与集成技术平台成套实训设备

制造单元智能化改造与集成技术平台成套实训设备 一、概述&#xff1a; 本设备以汽车行业的轮毂为产品对象&#xff0c;实现了仓库取料、制造加工、打磨抛光、检测识别、分拣入位等生产工艺环节&#xff0c;以未来智能制造工厂的定位和需求为参考&#xff0c;通过工业以太网完成…...