消息队列实战指南:三大MQ 与 Kafka 适用场景全解析
前言:在当今数字化时代,分布式系统和大数据处理变得愈发普遍,消息队列作为其中的关键组件,承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品,各自拥有独特的功能特性与适用场景。
本博客旨在深入剖析这四种消息队列的适用场景,通过详细阐述与丰富实例,为技术人员在架构选型时提供清晰且实用的参考。无论你是初涉分布式开发领域的新手,还是经验丰富的架构师,都能从中获取到有价值的信息,帮助你在面对复杂的业务需求时,做出最适合的技术选择。
此前,我已发布了Kafka的搭建手册,在接下来的日子里,我将持续发力,陆续推出ActiveMQ、RabbitMQ以及RocketMQ这三大消息中间件的详细搭建与应用指南,以助力大家更全面、深入地掌握这些关键技术,满足不同业务场景下的需求。
一、什么是消息队列?
消息队列是在消息的传输过程中保存消息的容器,用于接收消息并以文件的方式存储。一个消息队列可以被一个或多个消费者消费,包含以下三个元素:
- Producer:消息生产者,负责产生和发送消息到Broker。
- Broker:消息处理中心,负责消息存储、确认、重试等,一般其中会包含多个Queue。
- Consumer:消息消费者,负责从Broker中获取消息,并进行相应处理。
二、消息队列模式
- 点对点模式:多个生产者可以向同一个消息队列发送消息,一个具体的消息只能由一个消费者消费。
- 发布/订阅模式:单个消息可以被多个订阅者并发地获取和处理。
三、MQ 与 Kafka 的典型适用场景剖析
1、消息队列应用场景
- 应用解耦
- 消息队列减少了服务之间的耦合性,不同的服务可以通过消息队列进行通信,而不用关心彼此的实现细节。例如,在电商系统中,订单服务、库存服务和物流服务之间通过消息队列传递信息,当库存服务需要升级时,不会影响订单服务和物流服务的正常运行。
- 异步处理
- 消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息。比如在用户注册场景中,注册成功后系统会发送欢迎邮件,但邮件发送可能耗时较长,将邮件发送任务放入消息队列,用户注册流程无需等待邮件发送完成,即可快速返回给用户注册成功的结果。
- 流量削峰
- 当上下游系统处理能力存在差距的时候,利用消息队列做一个通用的 “载体”,在下游有能力处理的时候,再进行分发与处理。以电商促销活动为例,瞬间大量的订单请求涌入,通过消息队列将这些订单请求暂存,下游订单处理系统按照自身处理能力从队列中逐步获取订单进行处理,避免系统因高并发请求而崩溃。
- 日志处理
- 日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。在大型分布式系统中,各个服务产生的海量日志可通过Kafka进行收集、传输和存储,方便后续的日志分析和系统监控。
- 消息通讯
- 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯,比如实现点对点消息队列,或者聊天室等。像即时通讯软件中,用户发送的消息可通过消息队列进行高效传递,保证消息的实时性和可靠性。
- 消息广播
- 如果没有消息队列,每当一个新的业务方接入,我们都要接入一次新接口。有了消息队列,我们只需要关心消息是否送达了队列,至于谁希望订阅,是下游的事情,无疑极大地减少了开发和联调的工作量。例如在数据共享平台中,数据生产者将数据发送到消息队列,多个不同的业务方作为消费者从队列中订阅所需数据,无需为每个业务方单独开发和对接数据传输接口。
2、三大MQ 与 Kafka 的典型适用场景
ActiveMQ:
- 企业应用集成:可用于在不同的应用程序之间进行可靠的消息传递,实现系统之间的集成和通信。比如在企业内部,不同部门的业务系统之间需要进行数据交互和协同工作,ActiveMQ可以作为消息中间件来保障消息的可靠传递。
- 分布式系统:其可扩展性和高可用性特点,使其能够支持分布式系统的构建。在一些分布式架构中,各个节点之间需要进行消息的同步和通信,ActiveMQ可以满足这一需求,确保系统整体的稳定运行。
- 大消息传输:相较于RabbitMQ在高并发短消息处理上的优势,ActiveMQ在大消息传输方面表现更好。当系统中需要传输较大的数据包,如文件传输、大数据量的报表数据等场景时,ActiveMQ能够更高效地处理。
RabbitMQ:
- 异步处理:适用于多种异步处理任务,如用户注册后的邮件发送、订单处理等。在电商平台中,用户下单后,订单处理涉及库存管理、支付确认等多个步骤,通过RabbitMQ异步传递订单信息,可提高处理效率,避免用户等待。
- 应用解耦:支持多种通信模式,如点对点、发布/订阅等,能帮助系统各部分保持低耦合度,便于独立扩展和维护。在微服务架构中,各个微服务之间可通过RabbitMQ进行消息交互,减少服务间的直接依赖。
- 流量削峰:在面对高并发请求时,RabbitMQ可以作为缓冲层,将请求消息暂存于队列中,然后由后端服务逐步处理。例如在秒杀活动等场景下,大量用户同时发起请求,RabbitMQ能够有效缓解后端服务的压力,避免系统崩溃。
对消息传递要求较高的业务场景:由于其采用AMQP协议,具备丰富的功能特性,如灵活的消息过滤、异步RPC调用、事务支持以及定时消息等,因此适合在线交易等对消息传递的可靠性、顺序性等要求较高的业务。
RocketMQ:
- 实时消息处理:设计之初就是为了支持互联网在线业务,非常适合对实时性要求很高的应用场合,如金融交易系统、在线支付等。能够快速地将消息传递给消费者,保障业务的实时性。
- 顺序消息处理:对于一些要求消息严格按照发送顺序进行消费的应用,如订单状态更新、电商业务中的Binlog消息分发等,RocketMQ通过其独特的设计保证了消息的顺序性。
事务消息处理:支持分布式事务消息,这对于确保跨多个服务或数据库操作的一致性非常关键,例如在电子商务平台中完成订单创建的同时扣减库存的操作。 - 大数据分析:虽然Kafka更常被提到用于大数据流处理,但RocketMQ同样可以应用于日志收集、监控数据上报等领域,为后续的数据分析提供支持。
移动互联网与物联网:鉴于其高效的消息传递能力及可扩展性,广泛应用于移动互联网服务,如即时通讯,以及物联网设备间的通信。其对MQTT协议的支持,使其成为连接海量设备的理想选择之一。
社交网络活动流:在社交平台中,用户行为产生的大量事件流可以通过RocketMQ快速传播给相关订阅者。
Kafka:
- 大数据领域的实时计算、日志采集等场景:Kafka是业内标准的选择,社区活跃度高,已成为许多实时数据架构中不可或缺的部分,用于处理数据缓冲与分发任务。其基于磁盘顺序写入与读取的方式优化了I/O操作效率,能够在保持较低硬件成本的同时实现非常高的吞吐量。
- 大规模数据流处理:其设计初衷就是为了解决大规模数据流处理中的挑战,如日志收集、事件源系统等。在需要处理大量数据的场景下,Kafka的高吞吐量特点尤为突出,能够轻松应对海量数据的持续摄入和处理。
- 与其他大数据工具集成:Kafka拥有广泛的数据处理框架集成,如Spark、Flink等,这使其成为了构建高效数据管道的强大工具,便于简化整个数据管道架构的设计与实现过程。
消息系统替代者:可作为传统消息系统的替代品,与传统消息系统相比,Kafka有更好的吞吐量、更好的可用性,这有利于处理大规模的消息。
四、MQ和Kafka的架构、工作原理和优缺点
ActiveMQ
- 架构:
包含 Producer、Broker、Consumer 等基本组件。Broker 是消息处理中心,可独立部署或嵌入应用。支持多种协议如 STOMP、OpenWire、AMQP 等,可通过这些协议与不同系统交互。 - 工作原理:
Producer 产生消息并发送到 Broker,Broker 存储消息,Consumer 从 Broker 获取消息进行处理。支持点对点和发布/订阅模式,在点对点模式下,消息被特定消费者接收;发布/订阅模式中,消息可被多个订阅者获取。 - 优点:
成熟产品,在许多公司有应用(非大规模场景);有多重语言的成熟客户端;支持多种协议,文档丰富。 - 缺点:
目前社区对 5.x 维护减少,不适合大规模吞吐场景;据用户反馈会出现莫名问题且可能丢失消息;在大规模应用中存在性能瓶颈,如上千个队列的应用场景表现不佳。
RabbitMQ
- 架构:
基于 AMQP 协议,主要组件有 Producer、Consumer、Broker(包含 Exchange、Queue、Channel 等),由生产者、消费者和服务端组成。Exchange 接收消息并按路由规则将消息路由到 Queue,Channel 是消息读写的操作通道,客户端可建立多个 Channel 进行不同会话任务。生产者连接到Server,建立连接并开启信道,声明交换器和队列,设置属性并通过路由键绑定。消费者也需建立连接和信道以接收消息。 - 工作原理:
生产者连接到Server,建立连接并开启信道。
生产者声明交换器和队列,设置相关属性,并通过路由键将交换器和队列进行绑定。
消费者建立连接,开启信道,便于接收消息。
生产者发送消息到服务端中的虚拟主机。
虚拟主机中的交换器根据路由键选择路由规则,将消息发送到不同的消息队列中。
订阅了消息队列的消费者获取到消息并进行消费。常用交换器类型有 direct、topic、fanout、headers 四种。 - 优点:
支持几乎所有受欢迎的编程语言,如Java、C、C++、C#、Ruby、Perl、Python、PHP等。
支持消息路由,可通过不同交换器支持不同种类的消息路由。
支持消息时序,可通过延时队列指定消息的延时时间和过期时间TTL等。
支持容错处理,通过交付重试和死信交换器(DLX)来处理消息处理故障。
提供易用的用户界面,方便用户监控和管理消息Broker。
社区活跃度高。 - 缺点:
用 Erlang 用Erlang开发,源码难以理解,不利于二次开发和维护,基本依赖开源社区维护和修复bug。
吞吐量相对较低,实现机制较重。
不支持消息有序、持久化较差、不支持消息回溯、伸缩性一般。
RocketMQ
- 架构:
技术架构中有四大角色NameServer、Broker、Producer和Consumer。NameServer充当注册中心,Broker用于存放Queue,一个Broker可配置多个Topic,一个Topic中存在多个Queue。Broker通过集群部署,提供master/slave结构,slave定时从master同步数据,master宕机时,slave提供消费服务但不能写入消息。 - 工作原理:
消息模型按主题模型实现,包括Producer Group、Topic、Consumer Group三个角色。
一个Topic包含多个Queue,生产者组根据主题将消息放入对应Topic,采用轮询等方式找到Queue。
消费群组和Queue的关系类似Kafka中的消费群组和Partition,不同消费者组互不干扰,一个Queue只能被一个消费者消费,一个消费者可消费多个Queue,通过偏移量记录消费位置。 - 优点:
高吞吐,借鉴Kafka设计,单一队列有百万消息的堆积能力。
高伸缩性,有灵活的分布式横向扩展部署架构,整体架构与Kafka类似。
高容错性,通过ACK机制保证消息正常消费。
消息可持久化到磁盘中,支持消息回溯。
在一个队列中能可靠地实现先进先出(FIFO)和严格的顺序传递。
支持发布/订阅和点对点消息模型,支持拉、推两种消息模式。
提供docker镜像用于隔离测试和云集群部署,提供配置、指标和监控等功能丰富的Dashboard。 - 缺点:
不支持消息路由。
支持的客户端语言不多,目前主要是Java和C++,且C++版本不成熟。
部分支持消息有序,需将同类消息hash到同一Queue中才能支持顺序,若散落到不同Queue则不能保证顺序。
社区活跃度一般。
Kafka
- 架构:
一个典型的Kafka集群包含Producer、broker、Consumer Group、Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。 - 工作原理:
消息经序列化后,通过不同分区策略(顺序轮询、随机轮询和 key hash 等)找到对应分区,相同主题和分区的消息存放在同一批次里,由独立线程发送到Kafka Broker上。
分区是Kafka读写数据的最小粒度,可通过分区实现伸缩性。主题的分区可部署在多个不同机器上,消费者通过消费群组完成消费,一个消费者可消费多个分区,但一个分区只能被一个消费者消费。消费者增加会触发Rebalance,不同消费群组互不干涉。
优点
高吞吐、低延迟,每秒可处理几十万条消息,最低延迟仅几毫秒。
高伸缩性,每个主题含多个分区,分区可分布在不同主机的broker中。
高稳定性,是分布式系统,数据有多个副本,某节点宕机时集群仍能正常工作。
消息可持久化存储,支持数据备份防丢失,能保证所有消息被消费且仅被消费一次,支持消息回溯。
有优秀的第三方Kafka Web管理界面Kafka-Manager,在日志领域较成熟,被多家公司和多个开源项目使用。 - 缺点:
单机超过64个队列/分区时,Load会明显飙高,队列越多,load越高,发送消息响应时间变长。
不支持消息路由、延迟发送和消息重试。
社区更新较慢。
五、MQ 与 Kafka 适用场景实例展示:
- ActiveMQ:适用于企业级应用集成,对多种消息协议兼容,支持分布式事务,消息持久化能力强。例如,在一个银行系统中,涉及多个子系统之间的交互,如账户系统、交易系统、清算系统等,当进行一笔跨行转账时,需要保证各个系统之间的数据一致性,ActiveMQ可以通过支持XA事务来确保整个转账过程的原子性和完整性。
- RabbitMQ:适合高并发异步处理、微服务通信及分布式任务调度,具备灵活的路由机制和强大的消息队列管理能力。例如,在一个电商网站中,当用户提交订单后,系统需要同时进行库存扣减、订单状态更新、积分计算等多个操作,这些操作可以通过RabbitMQ将任务异步发送到不同的队列中,由相应的消费者进行处理,从而提高系统的响应速度和吞吐量。
- RocketMQ:常用于电商、金融等大型分布式系统,支持分布式事务消息和消息顺序性。例如,在电商系统的订单处理流程中,从订单创建、支付、发货到确认收货等环节,需要保证消息的顺序性,RocketMQ可以确保这些消息按照正确的顺序被处理,避免出现订单状态混乱的情况。
- Kafka:主要用于大规模数据实时处理、流计算平台以及数据共享和交换,具有高吞吐量和可扩展性。例如,在一个互联网公司的日志收集系统中,每天会产生大量的用户访问日志、系统日志等,Kafka可以快速地接收和存储这些日志数据,并将其分发给不同的消费者进行实时分析,如统计用户行为、监控系统性能等。
六、MQ 与 Kafka 适用场景总结归纳
- ActiveMQ 常用于企业级应用集成,它支持多种协议以及分布式事务。以银行多系统转账场景为例,在涉及储蓄系统、支付系统、清算系统等多个系统间的资金流转时,ActiveMQ 能够确保各环节数据的一致性。
- RabbitMQ 适用于高并发异步处理场景。在电商业务中,当用户下单后,系统需同时执行如库存扣减、生成订单快照、发送下单通知邮件等多个任务。借助 RabbitMQ 灵活的路由策略,以及其对直连、主题、扇出等多种消息模式的支持,系统可以将不同类型的任务消息精准分发给对应的处理模块,高效实现复杂业务逻辑下的消息分发。例如,通过主题模式,将库存相关消息发送到库存管理模块,将邮件通知消息发送到邮件服务模块。
- RocketMQ 在顺序消息处理和事务消息支持方面表现突出,在电商、金融等大型分布式系统中优势显著。在电商订单流程里,从用户下单、支付成功到商家发货、物流配送及最终的订单完成确认,每个环节都需要严格按照顺序处理消息。以支付成功后的流程为例,RocketMQ 能确保先发送资金到账消息给商家账户系统,再触发库存减少消息给仓储系统,保证整个流程有条不紊。在金融交易系统中,如股票买卖,RocketMQ 的事务消息支持可以保证交易的原子性,确保买卖双方资金和股票的交割准确无误。
- Kafka 则擅长处理大规模数据实时处理场景。互联网公司每天会产生海量的用户行为日志、系统运行日志等数据。Kafka 凭借其强大的吞吐量和扩展性,能够快速收集这些日志数据,并将其高效分发给实时分析系统。比如,通过 Kafka 将用户在网站上的浏览、点击等行为日志实时传输给数据分析平台,用于实时统计热门商品、用户活跃度等信息,为运营决策提供及时支持。
消息队列技术
├── ActiveMQ
│ ├── 企业应用集成
│ │ ├── 多协议支持
│ │ └── 分布式事务
│ ├── 分布式系统
│ │ ├── 可扩展性
│ │ └── 高可用性
│ └── 大消息传输
│ ├── 文件传输
│ └── 大数据量报表数据
├── RabbitMQ
│ ├── 异步处理
│ │ ├── 用户注册邮件发送
│ │ └── 订单处理
│ ├── 应用解耦
│ │ ├── 点对点通信
│ │ └── 发布/订阅模式
│ ├── 流量削峰
│ │ └── 秒杀活动请求缓冲
│ └── 高要求业务场景
│ ├── 消息过滤
│ ├── 异步RPC调用
│ ├── 事务支持
│ └── 定时消息
├── RocketMQ
│ ├── 实时消息处理
│ │ ├── 金融交易系统
│ │ └── 在线支付
│ ├── 顺序消息处理
│ │ ├── 订单状态更新
│ │ └── Binlog消息分发
│ ├── 事务消息处理
│ │ └── 订单创建与库存扣减
│ ├── 大数据分析
│ │ ├── 日志收集
│ │ └── 监控数据上报
│ ├── 移动互联网与物联网
│ │ ├── 即时通讯
│ │ └── 物联网设备通信
│ └── 社交网络活动流
│ └── 用户行为事件流传播
└── Kafka├── 大数据实时计算│ ├── 日志采集│ └── 数据缓冲与分发├── 大规模数据流处理│ ├── 高吞吐量│ └── 海量数据持续摄入├── 大数据工具集成│ ├── Spark│ └── Flink└── 消息系统替代├── 高吞吐量└── 高可用性
相关文章:
消息队列实战指南:三大MQ 与 Kafka 适用场景全解析
前言:在当今数字化时代,分布式系统和大数据处理变得愈发普遍,消息队列作为其中的关键组件,承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品࿰…...
postgresql表分区及测试
本文主要采用list类型实现表分区,并对表分区数据进行查询对比,数据量6000万条以上,速度相差10倍以上。 一、创建表,以substationcode字段为ist类型表分区 CREATE TABLE "public"."d_population_partition" …...
VUE学习笔记(入门)1__创建VUE实例
核心步骤 <div id"app"><!-- 这里存放渲染逻辑代码 --><h1>{{ msg }}</h1><a href"#">{{count}}</a> </div><!-- 引入在线的开发版本核心包 --> <!-- 引入核心包后全局可使用VUE构造函数 --> <…...
STL—stack与queue
目录 Stack stack的使用 stack的模拟实现 queue queue的使用 queue的模拟实现 priority_queue priority_queue的用法 priority_queue的模拟实现 容器适配器 种类 Stack http://www.cplusplus.com/reference/stack/stack/?kwstack stack是栈,后入先出 stack的…...
pthread_create函数
函数原型 pthread_create 是 POSIX 线程(pthread)库中的一个函数,用于在程序中创建一个新线程。 #include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *a…...
suctf2025
Suctf2025 --2标识为看的wp,没环境复现了 所有参考资料将在文本末尾标明 WEB SU_photogallery 思路👇 构造一个压缩包,解压出我们想解压的部分,然后其他部分是损坏的,这样是不是就可以让整个解压过程是出错的从而…...
二、点灯基础实验
嵌入式基础实验第一个就是点灯,地位相当于编程界的hello world。 如下为LED原理图,要让相应LED发光,需要给I/O口设置输出引脚,低电平,二极管才会导通 2.1 打开初始工程,编写代码 以下会实现BLINKY常亮&…...
ESP8266-01S、手机、STM32连接
1、ESP8266-01S的工作原理 1.1、AP和STA ESP8266-01S为WIFI的透传模块,主要模式如下图: 上节说到,我们需要用到AT固件进行局域网应用(ESP8266连接的STM32和手机进行连接)。 ESP8266为一个WiFi透传模块,和…...
微服务学习:基础理论
一、微服务和应用现代化 1、时代的浪潮,企业的机遇和挑战 在互联网化数字化智能化全球化的当今社会,IT行业也面临新的挑战: 【快】业务需求如“滔滔江水连绵不绝”,企业需要更快的交付【变】林子大了,百色用户&…...
【c++继承篇】--继承之道:在C++的世界中编织血脉与传承
目录 引言 一、定义二、继承定义格式2.1定义格式2.2继承关系和访问限定符2.3继承后子类访问权限 三、基类和派生类赋值转换四、继承的作用域4.1同名变量4.2同名函数 五、派生类的默认成员构造函数5.1**构造函数调用顺序:**5.2**析构函数调用顺序:**5.3调…...
Java操作Excel导入导出——POI、Hutool、EasyExcel
目录 一、POI导入导出 1.数据库导出为Excel文件 2.将Excel文件导入到数据库中 二、Hutool导入导出 1.数据库导出为Excel文件——属性名是列名 2.数据库导出为Excel文件——列名起别名 3.从Excel文件导入数据到数据库——属性名是列名 4.从Excel文件导入数据到数据库…...
基于VSCODE+GDB+GDBSERVER远程单步调试设备篇(可视化界面)
目录 说明 配置方法 1)VSCODE必备插件 2)配置launch.json文件,用于GDB调试 调试步骤 目标板运行程序 1)已启动程序,通过attach方式进入调试 2)通过gdbserver启动时加载程序(程序路径根据实际情…...
【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)
单例模式 作用:单例模式的核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。 实现方式优缺点饿汉式线程安全,调用效率高 ,但是不能延迟加载懒汉式线程安全,调用效率不高,能延迟加载双重检…...
lvm快照备份
前提 数据文件要在逻辑卷上; 此逻辑卷所在卷组必须有足够空间使用快照卷; 数据文件和事务日志要在同一个逻辑卷上; 前提:MySQL数据lv和将要创建的快照要在同一vg,vg要有足够的空间存储 优点 几乎是热备&…...
PHP CRM售后系统小程序
💼 CRM售后系统 📺这是一款基于PHP和uniapp深度定制的CRM售后管理系统,它犹如企业的智慧核心,精准赋能销售与售后管理的每一个环节,引领企业步入精细化、数字化的全新管理时代。系统集成了客户管理、合同管理、工单调…...
ETL 数据抽取
ETL ETL 数据抽取 ETL(Extract, Transform, Load)是数据集成和处理的重要过程,其中数据抽取(Extract)是第一步,负责从各种数据源中提取数据。以下是ETL数据抽取的详细说明和常用工具: 1. 数据…...
FANUC机器人系统镜像备份与恢复的具体步骤(图文)
FANUC机器人系统镜像备份与恢复的具体步骤(图文) 镜像备份: 如下图所示,进入文件—工具—切换设备,找到插入的U盘UT1, 如下图所示,进入U盘目录后,创建目录,这里目录名称为11, 如下图所示...
MindsDB - 构建企业数据源 AI 对话
一、关于 MindsDB MindsDB是世界上最有效的解决方案,用于构建与混乱的企业数据源对话的AI应用程序。把它想象成图书管理员Marie Kondo。 github : https://github.com/mindsdb/mindsdb官网:https://www.mindsdb.com/官方文档:https://docs.…...
正则表达式(python版最全面,最易懂)
正则表达式 正则表达式英文称regular expression 定义:正则表达式是一种文本模式匹配的工具,用于字符串的搜索,匹配和替换。在excel,word以及其他的文本编辑器都可直接适配。 一、基本匹配规则 字面值字符:例如字母、数字、空格…...
QT 使用QTableView读取数据库数据,表格分页,跳转,导出,过滤功能
文章目录 效果图概述功能点代码分析导航栏表格更新视图表格导出表格过滤 总结 效果图 概述 本案例用于对数据库中的数据进行显示等其他操作。数据库的映射,插入等功能看此博客框架:数据模型使用QSqlTableModel,视图使用QTableView࿰…...
golang标准库path/filepath使用示例
文章目录 前言一、常用方法示例1.将相对路径转换为绝对路径2.获取路径中最后一个元素3.获取路径中除去最后一个元素的部分4.路径拼接5.将路径拆分为目录和文件名两部分6.返回一个相对路径7.文件路径遍历8.根据文件扩展名过滤文件9.使用正则表达式进行路径匹配 前言 path/filep…...
【日志篇】(7.6) ❀ 01. 在macOS下刷新FortiAnalyzer固件 ❀ FortiAnalyzer 日志分析
【简介】FortiAnalyzer 是 Fortinet Security Fabric 安全架构的基础,提供集中日志记录和分析,以及端到端可见性。因此,分析师可以更有效地管理安全状态,将安全流程自动化,并快速响应威胁。具有分析和自动化功能的集成…...
12 分布式事务
分布式事务产生的原因 我们拿mysql数据库来说,当数据库为单体数据库的时候,我们打开事务,执行sql为预执行阶段,最后commit时通过日志控制最终全部提交后存储到磁盘中,如果commit失败,可以通过日志控制回滚…...
移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场
近日,全球领先的物联网整体解决方案供应商移远通信正式宣布,其支持“卫星蜂窝”多模式的高集成度NTN卫星通信模组BG95-S5已成功获得NTN网络运营商Skylo的网络认证。BG95-S5也成为了获得该认证的最新款移远卫星通信模组。 BG95-S5模组顺利获得Skylo认证&a…...
51.WPF应用加图标指南 C#例子 WPF例子
完整步骤: 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑,去除背景使用正方形,放大图片使图标铺满图片使用格式工程转换为ico格式,分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…...
OpenEuler学习笔记(三):为什么要搞OpenEuler?
为什么要搞OpenEuler? 技术自主可控需求 在信息技术领域,操作系统是关键的基础软件。过去,很多关键技术被国外厂商掌控,存在技术“卡脖子”的风险。OpenEuler的出现可以为国内提供一个自主可控的操作系统选择。例如,在…...
Apache Hive--排序函数解析
在大数据处理与分析中,Apache Hive是一个至关重要的数据仓库工具。其丰富的函数库为数据处理提供了诸多便利,排序函数便是其中一类非常实用的工具。通过排序函数,我们能够在查询结果集中为每一行数据分配一个排名值,这对于数据分析…...
LLMs之Dataset:中文互联网基础语料2.0的简介、下载和使用方法、案例应用之详细攻略
LLMs之Dataset:中文互联网基础语料2.0的简介、下载和使用方法、案例应用之详细攻略 目录 中文互联网基础语料2.0的简介 1、特点 中文互联网基础语料2.0的下载和使用方法 中文互联网基础语料2.0的案例应用 中文互联网基础语料2.0的简介 2025年1月发布࿰…...
深入剖析iOS网络优化策略,提升App性能
一、引言 在当今移动互联网时代,iOS 应用的网络性能直接关系到用户体验。无论是加载速度缓慢、频繁的网络错误,还是高额的流量消耗,都可能导致用户流失。因此,iOS 网络优化成为开发者提升应用质量、增强用户满意度的关键环节。本文…...
unity2022以上导出到AndroidStudio后更新步骤
1、unity里面Export出unityLibrary 2、导出apk,里面才包含libil2cpp(新版unity无法直接导出libil2cpp 3、注释AS项目app下的build.gradle里面包含unityLibrary的代码 4、注释AS项目settings.gradle包含unityLibrary的代码 5、删除AS项目里面的unityLibrary文件夹 6、…...
03JavaWeb——Ajax-Vue-Element(项目实战)
1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序…...
表单中在不设置required的情况下在label前加*必填标识
参考:https://blog.csdn.net/qq_55798464/article/details/136233718 需求:在发票类型前面添加*必填标识 我最开始直接给发票类型这个表单类型添加了验证规则required:true,问题来了,这个发票类型它是有默认值的,所以我点击保存…...
Mac 使用 GVM 管理多版本 Go 环境
使用 GVM 管理多版本 Go 环境 在本文中,我们将使用 gvm(Go Version Manager)工具管理本地多个 Go 语言版本。gvm 功能类似于 Python 的 Anaconda,可以方便地切换不同版本的 Go 环境,非常适合需要多版本开发与测试的场…...
3DsMax设置中文界面
按键盘上的“Win”键,直接输入3dsmax,选择Simplified Chinese打开,之后就都是中文了...
【PyCharm】连接 Git
【PyCharm】相关链接 【PyCharm】连接 Git【PyCharm】连接Jupyter Notebook【PyCharm】快捷键使用【PyCharm】远程连接Linux服务器【PyCharm】设置为中文界面 要在 PyCharm 中连接 Git,确保您的开发环境已经安装了 Git,并且 PyCharm 能够访问它。 以下…...
使用Python和PIL裁剪图片以适应屏幕宽高比
在本教程中,我们将介绍如何使用Python和PIL(Python Imaging Library)库来裁剪图片,使其适应特定的屏幕宽高比。我们将详细解释代码的每个部分,并展示如何根据不同的裁剪模式来调整图片。 1. 安装PIL库 首先ÿ…...
Django简介与虚拟环境安装Django
目录 1.Django简介 1.1 Django 的核心特点 1.2 Django 的核心组件 1.3 Django 的应用场景 1.4 总结 2.基础环境建立 2.1 创建虚拟环境 2.1.1 使用 virtualenv 创建虚拟环境 2.1.2 使用 venv 创建虚拟环境 2.2 激活虚拟环境 2.2.1 在 Windows 上 2.2.2 在 macOS 或 …...
python实现pdf转word和excel
一、引言 在办公中,我们经常遇收到pdf文件格式,因为pdf格式文件不易修改,当我们需要编辑这些pdf文件时,经常需要开通会员或收费功能才能使用编辑功能。今天,我要和大家分享的,是如何使用python编程实现…...
Ubuntu 24.04 LTS 更改软件源
Ubuntu 24.04 LTS 修改软件源...
从CRUD到高级功能:EF Core在.NET Core中全面应用(三)
目录 IQueryable使用 原生SQL使用 实体状态跟踪 全局查询筛选器 并发控制使用 IQueryable使用 在EFCore中IQueryable是一个接口用于表示可查询的集合,它继承自IEnumerable但具有一些关键的区别,使得它在处理数据库查询时非常有用,普通集…...
浅谈云计算22 | Kubernetes容器编排引擎
Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…...
C 语言的void*到底是什么?
一、void* 的类型任意性 void* 是一种通用指针类型。它可以指向任意类型的数据。例如,它可以指向一个整数(int)、一个浮点数(float)、一个字符(char)或者一个结构体等。在C语言中,当…...
前端【3】--CSS布局,CSS实现横向布局,盒子模型
盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一:使用 float 普通盒子实现横向布局 方法二:使用 display: inline-block 内联块级元素实现横向布局 方法三:使用弹性盒子 flexbox࿰…...
JavaEE
一.web开发概述 1.服务器 解释1:服务器是一款软件,可以向其他发送请求,服务器会做出一个响应。可以在服务器中部署文件,让其他人访问。 解释2:也可以把运行服务器软件的计算机称为服务器 2.安装服务器 Tomcat官方…...
C语言之文本加密程序设计
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 文本加密程序设计 摘要:本文设计了一种文本加密程序,旨在提高信息安…...
Spring-Data-Redis连接模式
Redis可以在各种设置中操作。每个操作模式都需要特定的配置,这些配置将在以下部分中进行解释。 一、Redis 单机模式 最简单的入门方法是将Redis Standalone与单个Redis服务器一起使用, 配置LettuceConnectionFactory或JedisConnectionFactor࿰…...
详细介绍下linux内核的高端地址
在32位系统中,内核空间通常占据1GB,用户空间占3GB,这主要是基于历史原因、内存管理需求和系统安全性考虑。 历史原因:早期的UNIX系统就采用了将内核空间和用户空间分离的设计,在32位系统设计时,延续了这种…...
ThinkPhp项目解决静态资源请求的跨域问题的解决思路
背景:我在前端使用vue语言开发的,请求的后端是用ThinkPhp项目开发的。我vue项目里的请求php接口,自带header参数的跨域问题通过网上查询到的server端配置方法已经解决了。我使用的 是中间件的配置方法: <?php//admin 项目 配…...
通过图形界面展现基于本地知识库构建RAG应用
1. 客户需求 快速完成概念验证(PoC)通过图形界面快速完成演示本地私有数据对比不同模型和成本,决定如何部署 2. 阿里云基于本地知识库构建RAG应用 参考方案: 百炼本地知识库方案 解决方案: FastAPI Gradio Llamaindex qwen-plus 主要三大…...
GCPAAS/DashBoard:完全免费的仪表盘设计,基于Vue+ElementUI+G2Plot+Echarts,开源代码,简单易用!还在等什么呢
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 GCPAAS/DashBoard,一款基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的仪表盘设计器,具备仪表盘目录管理…...