【Rust光年纪】深度解读:Rust语言中各类消息队列客户端库详细对比

news/2024/9/18 14:51:28/ 标签: rust, 开发语言, 后端

选择最佳 Rust 消息队列客户端库:全面对比与分析

前言

随着现代应用程序的复杂性不断增加,消息队列成为构建可靠、高性能系统的重要组件。本文将介绍一些用于Rust语言的消息队列客户端库,包括AMQP、Apache Kafka、NSQ、Apache Pulsar和RocketMQ,探讨它们的核心功能、使用场景、安装配置以及API概览。

欢迎订阅专栏:Rust光年纪

文章目录

  • 选择最佳 Rust 消息队列客户端库:全面对比与分析
    • 前言
    • 1. lapin:一个AMQP的客户端库
      • 1.1 简介
        • 1.1.1 核心功能
        • 1.1.2 使用场景
      • 1.2 安装与配置
        • 1.2.1 安装方法
        • 1.2.2 基本设置
      • 1.3 API 概览
        • 1.3.1 连接管理
        • 1.3.2 消息传递
    • 2. kafka-rust:一个Apache Kafka的客户端库
      • 2.1 简介
        • 2.1.1 核心功能
        • 2.1.2 使用场景
      • 2.2 安装与配置
        • 2.2.1 安装指导
        • 2.2.2 基本配置
      • 2.3 API 概览
        • 2.3.1 生产者和消费者
        • 2.3.2 Topic管理
    • 3. rdkafka:一个用于Rust语言的Apache Kafka客户端
      • 3.1 简介
        • 3.1.1 核心功能
        • 3.1.2 使用场景
      • 3.2 安装与配置
        • 3.2.1 安装指南
        • 3.2.2 基本配置
      • 3.3 API 概览
        • 3.3.1 消费者组管理
        • 3.3.2 高级特性实现
    • 4. nsq-rs:一个用于Rust语言的NSQ消息队列客户端
      • 4.1 简介
        • 4.1.1 核心功能
        • 4.1.2 使用场景
      • 4.2 安装与配置
        • 4.2.1 安装指南
        • 4.2.2 基本配置
      • 4.3 API 概览
        • 4.3.1 生产者与消费者
        • 4.3.2 主题与通道管理
    • 5. pulsar-rs:一个用于Rust语言的Apache Pulsar客户端
      • 5.1 简介
        • 5.1.1 核心功能
        • 5.1.2 使用场景
      • 5.2 安装与配置
        • 5.2.1 安装指南
        • 5.2.2 基本配置
      • 5.3 API 概览
        • 5.3.1 Producer与Consumer
        • 5.3.2 Topic管理
    • 6. rocketmq-rust:一个用于Rust语言的RocketMQ客户端
      • 6.1 简介
        • 6.1.1 核心功能
        • 6.1.2 使用场景
      • 6.2 安装与配置
        • 6.2.1 安装指南
        • 6.2.2 基本配置
      • 6.3 API 概览
        • 6.3.1 发布与订阅
        • 6.3.2 队列管理
    • 总结

1. lapin:一个AMQP的客户端库

lapin是一个用于AMQP(高级消息队列协议)的Rust语言客户端库,它提供了连接管理、消息传递等功能,可以帮助用户轻松地与AMQP消息队列进行交互。

1.1 简介

lapin库提供了以下核心功能:

1.1.1 核心功能
  • 连接管理:lapin允许用户轻松地建立和管理与AMQP服务器的连接。
  • 消息传递:用户可以使用lapin库发送和接收AMQP消息,实现消息队列的功能。
1.1.2 使用场景

lapin适用于需要在Rust应用程序中与AMQP消息队列进行交互的场景,例如分布式系统、微服务架构等。

1.2 安装与配置

1.2.1 安装方法

您可以通过在Cargo.toml文件中添加lapin库的依赖来安装lapin。具体步骤如下:

[dependencies]
lapin = "1.5"
tokio = { version = "1", features = ["full"] }

更多关于lapin库的安装信息,请参考 lapin官方文档

1.2.2 基本设置

在使用lapin之前,您需要为AMQP连接进行基本设置,包括指定AMQP服务器的地址、认证信息等。具体设置可以参考lapin官方文档中的示例代码。

1.3 API 概览

lapin库提供了丰富的API,以下是一些主要的API功能。

1.3.1 连接管理

用户可以使用lapin库轻松地建立和管理与AMQP服务器的连接。以下是一个简单的连接示例:

rust">use lapin::Connection;
use lapin::ConnectionProperties;#[tokio::main]
async fn main() {let addr = "amqp://127.0.0.1:5672/%2f";let conn = Connection::connect(addr, ConnectionProperties::default()).await.unwrap();
}

更多关于lapin库连接管理的信息,请参考 lapin官方文档

1.3.2 消息传递

lapin库可以帮助用户发送和接收AMQP消息,实现消息传递的功能。以下是一个简单的消息传递示例:

rust">use lapin::BasicProperties;
use lapin::options::BasicPublishOptions;
use lapin::types::FieldTable;let channel = conn.create_channel().await?;
let payload = b"Hello from lapin!";
let confirm = channel.basic_publish("exchange_name","routing_key",payload.to_vec(),BasicPublishOptions::default(),BasicProperties::default(),FieldTable::default()
).await?;
confirm.await?;

更多关于lapin库消息传递的信息,请参考 lapin官方文档

以上是lapin库的一些基本功能介绍和示例代码,希望能够帮助您快速上手使用lapin库进行AMQP消息队列的操作。

rustApache_Kafka_97">2. kafka-rust:一个Apache Kafka的客户端库

2.1 简介

kafka-rust是一个Apache Kafka的客户端库,用于Rust语言。它提供了与Kafka集成的功能,使得在Rust程序中可以方便地使用Kafka进行消息传输和管理。

2.1.1 核心功能
  • 生产者和消费者API
  • Topic管理
  • 消息传输和处理
2.1.2 使用场景

kafka-rust适用于需要在Rust应用程序中使用Apache Kafka作为消息队列或事件流平台的场景。例如,在大规模数据处理、实时日志记录、事件驱动架构等方面有广泛的应用。

2.2 安装与配置

2.2.1 安装指导

你可以通过Cargo添加kafka-rust作为项目的依赖:

[dependencies]
kafka-rust = "0.22.0"

更多安装和更新信息,请参考 kafka-rust官方文档

2.2.2 基本配置

在使用kafka-rust之前,需要确保正确配置Kafka集群的连接信息,包括broker地址、topic等。

rust">use kafka_rust::{Error, ClientConfig, Producer, message::ToBytes};
use std::time::Duration;fn main() {let broker = "localhost:9092";let topic = "test";let producer: &Producer = match Producer::from_hosts(vec!(broker.to_string())).with_ack_timeout(Duration::from_secs(5)).create() {Err(e) => panic!("Failed to create producer: {}", e),Ok(p) => p};// 发送消息let data = "Hello, Kafka!";let res = producer.send(&data.to_bytes().unwrap(), None, Some(&topic));match res {Ok(partition) => println!("Sent successfully to partition {}", partition),Err((kafka_error, _message)) => eprintln!("Error sending message: {}", kafka_error),}
}

2.3 API 概览

2.3.1 生产者和消费者

kafka-rust提供了生产者和消费者API用于发送和接收消息。下面是一个简单的生产者示例:

rust">// 创建生产者
let producer: &Producer = match Producer::from_hosts(vec!("localhost:9092".to_string())).create() {Err(e) => panic!("Failed to create producer: {}", e),Ok(p) => p
};// 发送消息
let data = "Hello, Kafka!";
let res = producer.send(&data.to_bytes().unwrap(), None, Some("test"));
match res {Ok(partition) => println!("Sent successfully to partition {}", partition),Err((kafka_error, _message)) => eprintln!("Error sending message: {}", kafka_error),
}

消费者的使用方式类似,可以订阅topic并拉取消息进行处理。详情请参考 kafka-rust官方文档

2.3.2 Topic管理

kafka-rust也提供了对Kafka Topic的管理功能,包括创建、删除、查找等操作。以下是一个简单的Topic创建示例:

rust">use kafka_rust::client::KafkaClient;
use kafka_rust::error::Error as KafkaError;fn main() -> Result<(), KafkaError> {let broker = "localhost:9092";let client = KafkaClient::new(vec!(broker.to_string()), None);// 创建Topicclient.create_topic("test", 1, -1)
}

更多关于Topic管理的操作,请参考 kafka-rust官方文档

以上是kafka-rust库的简要介绍和基本使用示例,希望对

3. rdkafka:一个用于Rust语言的Apache Kafka客户端

3.1 简介

rdkafka是一个用于Rust语言的Apache Kafka客户端,它提供了强大的功能和灵活的配置选项,使得在Rust应用中使用Kafka成为可能。

3.1.1 核心功能
  • 生产者API:允许Rust应用将消息发送到Kafka集群。
  • 消费者API:允许Rust应用从Kafka集群中拉取消息进行处理。
  • 主题和分区管理:支持在Rust应用中创建、删除和管理Kafka主题和分区。
  • 高级特性实现:支持Kafka的高级特性,如事务、自定义分区器等。
3.1.2 使用场景

rdkafka适用于需要在Rust应用中与Apache Kafka集成的场景。例如,在大规模数据处理、事件驱动架构和日志收集系统中,rdkafka可以作为可靠的消息队列解决方案。

3.2 安装与配置

3.2.1 安装指南

通过Cargo来安装rdkafka,首先需要在Cargo.toml文件中添加rdkafka的依赖:

[dependencies]
rdkafka = "0.25"

然后使用Cargo进行构建即可安装rdkafka。

更多安装详情请参考:rdkafka安装指南

3.2.2 基本配置

在使用rdkafka之前,需要进行基本的配置设置,包括Kafka服务器地址、主题名称等。以下是一个基本的配置示例:

rust">use rdkafka::config::ClientConfig;fn main() {let mut config = ClientConfig::new();config.set("bootstrap.servers", "localhost:9092");config.set("group.id", "my-consumer-group");// 其他配置设置...let producer: FutureProducer = config.create().expect("Producer creation error");
}

3.3 API 概览

3.3.1 消费者组管理

rdkafka提供了丰富的消费者组管理API,例如创建消费者组、订阅主题、拉取消息等操作。以下是一个简单的消费者组示例:

rust">use rdkafka::consumer::{Consumer, StreamConsumer};
use rdkafka::config::ClientConfig;fn main() {let consumer: StreamConsumer = ClientConfig::new().set("group.id", "my-group").set("bootstrap.servers", "localhost:9092").create().expect("Consumer creation failed");consumer.subscribe(&["my-topic"]).expect("Can't subscribe to specified topic");for message in consumer.start() {match message {Ok(msg) => {// 处理消息},Err(e) => {// 处理错误},}}
}
3.3.2 高级特性实现

除了基本的生产者和消费者功能外,rdkafka还支持Kafka的一些高级特性实现。例如,下面是一个使用事务的高级特性示例:

rust">use rdkafka::producer::{FutureProducer, FutureRecord};
use rdkafka::config::ClientConfig;fn main() {let producer: FutureProducer = ClientConfig::new().set("bootstrap.servers", "localhost:9092").create().expect("Producer creation error");let record = FutureRecord::to("my-topic").payload("message payload").key("message_key").headers(vec![("header_key", "header_value")]);let delivery_status = producer.send(record, 10000);
}

以上是对rdkafka在Rust语言中的基本介绍、安装配置方法和API概览。希望这些内容能够帮助你快速上手使用

4. nsq-rs:一个用于Rust语言的NSQ消息队列客户端

4.1 简介

4.1.1 核心功能

nsq-rs 是一个专为 Rust 语言设计的 NSQ(一个实时分布式消息传递平台)消息队列客户端。它提供了简单易用的 API,允许用户轻松地与 NSQ 进行交互。

4.1.2 使用场景

nsq-rs 可以被广泛地应用在需要实时消息传递的场景中,例如实时日志处理、事件通知等。

4.2 安装与配置

4.2.1 安装指南

要使用 nsq-rs,首先需要将其添加到项目的 dependencies 中。可以通过 Cargo.toml 文件进行添加:

rust">[dependencies]
nsq = "0.7"

然后在代码中引入 nsq crate:

rust">extern crate nsq;
4.2.2 基本配置

在使用 nsq-rs 之前,需要确保 NSQ 服务器已经正确安装并运行,并且了解 NSQ 的基本配置信息,例如服务器地址、端口等。

4.3 API 概览

4.3.1 生产者与消费者

nsq-rs 提供了生产者和消费者两个主要的 API 接口。下面是一个简单的示例,演示如何使用 nsq-rs 创建一个生产者,并发送消息到指定的主题:

rust">use nsq::producer::{Producer, Config};fn main() {let mut producer = Producer::new(Config::new().set("nsqd_tcp_address", "127.0.0.1:4150")).unwrap();producer.pub_message("test_topic", "Hello from nsq-rs").unwrap();
}
4.3.2 主题与通道管理

通过 nsq-rs,用户可以方便地创建、订阅、取消订阅主题和通道。以下是一个示例,展示了如何使用 nsq-rs 订阅特定主题和通道,并处理接收到的消息:

rust">use nsq::consumer::{Consumer, Config};
use nsq::Handler;struct MyHandler;impl Handler for MyHandler {fn handle_message(&mut self, msg: &nsq::Message) -> nsq::Result<()> {println!("Received message: {}", std::str::from_utf8(msg.body()).unwrap());Ok(())}
}fn main() {let config = Config::new().set("nsqd_tcp_addresses", vec!["127.0.0.1:4150"]);let mut consumer = Consumer::new("test_topic", "test_channel", Box::new(MyHandler), config).unwrap();consumer.run().unwrap();
}

请参考 nsq-rs GitHub 页面 获取更多详细信息和完整的文档。

5. pulsar-rs:一个用于Rust语言的Apache Pulsar客户端

5.1 简介

pulsar-rs是一个专为Rust语言设计的Apache Pulsar客户端,它提供了与Pulsar消息队列进行交互的功能,使得在Rust项目中使用Pulsar变得更加便捷。

5.1.1 核心功能
  • 连接Pulsar集群
  • 创建生产者(Producer)并发送消息
  • 创建消费者(Consumer)并接收消息
  • 管理Pulsar主题(Topic)
5.1.2 使用场景

pulsar-rs适用于需要在Rust项目中使用Pulsar消息队列的开发者,无论是在构建实时数据处理系统还是异步通信系统中,都能发挥其作用。

5.2 安装与配置

5.2.1 安装指南

要在Rust项目中使用pulsar-rs客户端,可以在Cargo.toml文件中添加以下依赖:

[dependencies]
pulsar = "0.5.0"

然后在代码中引入pulsar库即可开始使用。

5.2.2 基本配置

pulsar-rs的基本配置包括Pulsar集群的地址、端口等信息,具体可以参考官方文档进行配置。

5.3 API 概览

5.3.1 Producer与Consumer

以下是一个简单示例,演示如何通过pulsar-rs创建生产者并发送消息:

rust">use pulsar::producer::Producer;#[tokio::main]
async fn main() -> Result<(), pulsar::Error> {let addr = "pulsar://127.0.0.1:6650";let topic = "my-topic";let producer: Producer = Producer::builder(addr, topic).build().await?;producer.send("Hello, Pulsar!").await?;Ok(())
}

上述代码首先创建了一个Pulsar生产者,并指定了Pulsar集群的地址和主题名称,然后通过send方法向指定主题发送消息。更多关于Producer的API细节可以在 pulsar-rs官方文档 中找到。

同样地,创建消费者并接收消息的操作也类似,读者可参考官方文档进行详细了解。

5.3.2 Topic管理

pulsar-rs 提供了一组用于管理Pulsar主题的API,包括创建主题、订阅主题、删除主题等操作。以下是一个简单示例,演示如何在Rust中使用pulsar-rs创建一个主题:

rust">use pulsar::topic::Topic;#[tokio::main]
async fn main() -> Result<(), pulsar::Error> {let addr = "pulsar://127.0.0.1:6650";let topic_name = "new-topic";let topic = Topic::new(addr, topic_name);topic.create().await?; // 创建新主题Ok(())
}

上述代码中,创建了一个名为"new-topic"的Pulsar主题。更多关于Topic管理的API细节可以在 pulsar-rs官方文档 中找到。

通过本文简要介绍,读者可以初步了解pulsar-rs客户端的基本使用方式及其API。在实际应用中,可以根据官方文档进一步探索不同功能的详细使用方法。

rustRustRocketMQ_464">6. rocketmq-rust:一个用于Rust语言的RocketMQ客户端

6.1 简介

rocketmq-rust是专为Rust语言设计的RocketMQ客户端,旨在提供高性能、低延迟的消息队列解决方案。它支持RocketMQ中的核心功能,并适用于各种使用场景。

6.1.1 核心功能
  • 发布与订阅:支持发布和订阅消息的功能,可以灵活地进行消息的发送和接收。
  • 队列管理:提供了对队列的管理功能,包括创建队列、删除队列等操作。
6.1.2 使用场景

rocketmq-rust适用于需要在Rust语言中使用消息队列的各种场景,例如分布式系统间的通讯、异步任务处理等。

6.2 安装与配置

6.2.1 安装指南

你可以通过Cargo来安装rocketmq-rust,只需在你的Cargo.toml文件中添加以下依赖即可:

rust">[dependencies]
rocketmq-rust = "0.1.0"

更多安装细节可以查看rocketmq-rust官方文档。

6.2.2 基本配置

在开始使用rocketmq-rust之前,你需要配置RocketMQ的相关信息,如NameServer的地址、Producer和Consumer的GroupID等。你可以通过以下代码示例来配置:

rust">use rocketmq_rust::producer::{Producer, DefaultProducer, SendResult};
use rocketmq_rust::config::producer_config::{ProducerConfig,DefaultProducerOption};
use rocketmq_rust::message::Message;fn main() {let producer = DefaultProducer::new(ProducerConfig{group_id: String::from("test_group"),name_server_addr: String::from("127.0.0.1:9876"),..DefaultProducerOption::default()});producer.start();// 其他逻辑
}

6.3 API 概览

6.3.1 发布与订阅

rocketmq-rust提供了便捷的API来发布和订阅消息。以下是一个简单的发布消息的示例:

rust">use rocketmq_rust::producer::{Producer, DefaultProducer, SendResult};
use rocketmq_rust::config::producer_config::{ProducerConfig,DefaultProducerOption};
use rocketmq_rust::message::Message;fn main() {let producer = DefaultProducer::new(ProducerConfig{group_id: String::from("test_group"),name_server_addr: String::from("127.0.0.1:9876"),..DefaultProducerOption::default()});producer.start();let msg = Message::new("test_topic", "test_tags", "Hello, RocketMQ");match producer.send(&msg) {Ok(send_result) => println!("SendResult: {:?}", send_result),Err(e) => eprintln!("Error: {:?}", e),}
}
6.3.2 队列管理

除了消息的发布与订阅,rocketmq-rust还提供了对队列的管理功能。你可以通过以下代码示例来创建一个队列:

rust">use rocketmq_rust::admin::{Admin, DefaultAdminExt};fn main() {let admin = DefaultAdminExt::with_namespace("test_namespace");admin.start();let queue = admin.create_queue("test_topic", "queue_name", 4);println!("Queue created: {:?}", queue);
}

以上就是rocketmq-rust的简要介绍以及一些基本的使用方法示例。如果需要更多详细信息,可以参考rocketmq-rust官方文档。

总结

通过本文的阅读,读者可以对几种用于Rust语言的消息队列客户端库有一个清晰的认识。无论是轻量级的NSQ,还是功能强大的Kafka,亦或是快速、可扩展并且具备持久性的Pulsar,Rust语言均有相应的客户端库。这些库都提供了丰富的特性和灵活的API,为开发者构建高效可靠的消息传递系统提供了良好的基础。


http://www.ppmy.cn/news/1516613.html

相关文章

GoWeb 设置别名和多环境配置

别名 vite.config.ts中添加代码如下即可 //设置别名resolve: {alias: {"": path.resolve(process.cwd(),"src"),//用替代src}}随后即可使用 配置多环境 vite.config.ts中添加代码如下 envDir: ./viteenv,//相对路径随后在项目根目录创建对应的viteenv…

什么是 SQL 注入,有哪些类型,如何预防?

如果说数据是系统的核心&#xff0c;那么SQL注入就是直插系统核心的漏洞。一直以来SQL注入漏洞就被列入OWASP最常见和影响最广泛的十大漏洞列表中。 SQL注入漏是系统漏洞中一种比较严重的漏洞&#xff0c;如果说数据是系统的核心&#xff0c;那么SQL注入就是直插系统核心的漏洞…

Web应用服务器Tomcat

一、Tomcat的功能介绍 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和 并发访问用户不是很多的场合下被普遍使用&#xff0c;Tomcat 具有处理HTML页面的功能&#xff0c;它还是一个Servlet和 JSP容器。 官网…

PHP多门店民宿酒店预订系统小程序源码

&#x1f3e8;✨「多门店酒店民宿预订系统」——一键解锁全球住宿新体验&#xff01;&#x1f30d;&#x1f3e0; &#x1f31f; 开篇种草&#xff1a;旅行新伙伴&#xff0c;预订无忧&#xff01; 嘿小伙伴们&#xff0c;是不是每次计划旅行都被繁琐的酒店民宿预订搞得头大&…

uniapp封装请求

封装请求有两种&#xff1a; 一种是在服务端判断token是否失效&#xff0c;一种是在小程序端判断token是否过期&#xff0c;&#xff0c; 第二种在前端判断要简单些&#xff0c;&#xff0c;在拿到token的时候&#xff0c;并在前端设置一个token的过期时间的毫秒值&#xff0c…

分布式核心问题总结

一、幂等性 所谓幂等就是一次或多次操作同一个资源&#xff0c;所产生的影响均一致。产生问题的原因&#xff1a;网络阻塞和延迟、用户重复操作一锁 二判 三更新 三步严格控制顺序&#xff0c;确保加锁成功后进行数据查询和判断&#xff0c;幂等性判断通过后再更新&#xff0…

OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 裁剪线段与图像矩形相交的部分。 cv::clipLine 函数计算出完全位于指定矩形内的线段部分。如果线段完全位于矩形之外&#xff0c;则返回 false。…

HarmonyOS--认证服务-操作步骤

HarmonyOS–认证服务 文章目录 一、注册华为账号开通认证服务二、添加项目&#xff1a;*包名要与项目的包名保持一致三、获取需要的文件四、创建项目&#xff1a;*包名要与项目的包名保持一致五、添加json文件六、加入请求权限七、加入依赖八、修改构建配置文件&#xff1a;bui…

【C#】【EXCEL】Bumblebee/Classes/ExEnums.cs

文章目录 Bumblebee/Classes/ExEnums.csFlow diagramDescriptionCode Bumblebee/Classes/ExEnums.cs Flow diagram #mermaid-svg-FB98N7ZCCccQ4Z38 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-FB98N7ZCCccQ4Z38…

20.缓存的更新策略

定义 缓存中的旧数据与数据库不一致。 缓存更新策略的类型 1.内存淘汰&#xff0c;利用redis的内存淘汰机制&#xff0c;当内存不足时自动淘汰部分数据。下次查询时更新缓存。redis默认开启了此机制。这种保证数据的一致性差。 2.超时剔除&#xff0c;给缓存数据添加TTL时间…

一文搞清全钢防静电地板的生产过程

防静电地板是各类大小机房不可缺少的地面材料。其中全钢防静电地板应用较为广泛&#xff0c;全钢防静电地板为全钢结构特征&#xff0c;底边选用深级伸拉钢板&#xff0c;造成窝状结构特征&#xff0c;提升了全钢防静电地板的抗压强度&#xff0c;表层选用硬质SPCC钢板&#xf…

WPF书籍阅读不指南

<wpf编程宝典> 对于刚匆忙学完 c# 的我来说,非常费劲. 只能 依靠<WPF深入浅出>>来对照看. ...就算是两本书互相看,还是十分难受,非常不理解...... 古老丛书<<windows Presentation Foundation 编程指南>> 一本 非常非常厚 的书,看着也难受,案例非常…

c#透明悬浮球实现 从零开始用C#写一个桌面应用程序(三)

目标&#xff1a;透明悬浮球 记录日期&#xff1a;20240308 要求基础&#xff1a;C#语言基础部分事件与委托&#xff0c;c#桌面程序基础操作 注&#xff1a;可见前文 http://t.csdnimg.cn/9uWK8 今天开始做一个悬浮球软件。本以为最难的是让悬浮球的具体功能&#xff0c…

【Qt】常见控件 —— QPushButton | QRadioButton

文章目录 QPushButtonQPushButton 的基本功能介绍QPushButton 添加快捷键通过图片实现 上下左右实现方向键的槽函数设置快捷键连发功能 QRadioButtonQRadioButton 的基本功能介绍通过 QRadioButton 选择性别具有排他效果禁用 选项 槽函数的使用情况基于 QRadioButton 实现一个简…

爬虫使用代理IP:提升数据抓取效率的实践

爬虫使用代理IP的技巧和方法 在进行网络爬虫时&#xff0c;使用代理IP可以帮助你提高数据抓取效率和保护隐私。本文将介绍爬虫使用代理IP的技巧和方法&#xff0c;帮助你更好地进行数据抓取。 为什么爬虫需要使用代理IP 在进行大规模数据抓取时&#xff0c;目标网站可能会检…

数据仓库: 4- 数据质量管理 5- 元数据管理

目录 4- 数据质量管理4.1 数据清洗4.1.1 数据清洗的重要性4.1.2 数据清洗常见的问题4.1.3 数据清洗的步骤4.1.3.1 数据质量评估:4.1.3.2 制定清洗规则:4.1.3.3 执行清洗操作:4.1.3.4 验证清洗结果:4.1.3.5 迭代优化: 4.1.4 数据清洗的常用方法4.1.5 数据清洗的最佳实践4.1.6 总…

外贸管理系统采购销售报关计算机毕业设计VUE/PYTHON/MYSQL

开发一个基于Vue、Python和MySQL的外贸管理系统&#xff0c;用于处理采购、销售以及报关等业务流程。这样的系统通常涉及前端界面展示、后端逻辑处理以及数据库存储等多个部分。下面是一些关键组件的设计建议&#xff1a;1. 技术栈选择 前端: Vue.js 后端: Python (Flask/Djang…

大数据分析与挖掘技术实训室解决方案

一、大数据分析与挖掘技术概述 大数据分析与挖掘技术是指运用算法、工具和技术处理和分析大规模数据集的过程。这些数据集来源于多个渠道&#xff0c;例如传感器数据、社交媒体数据、网络日志和金融交易记录等。其目标是在这些海量数据中发现有价值的信息、模式和趋势&#xf…

【MySQL】黑悟空都掌握的技能,数据库隔离级别全攻略

前言 &#x1f34a;缘由 黑神话悟空玩家必备&#xff0c;数据库隔离级别完全解读 &#x1f423;闪亮主角 大家好&#xff0c;我是JavaDog程序狗 今天借着黑神话悟空的热度&#xff0c;跟大家分享一下数据库隔离级别&#xff0c;也是面试必备的八股文 &#x1f608;你想听的…

使用阿里的EasyExcel导入数据

工作遇到一种情况,在导入excel的时候数量过多,导致占用内存太大最终OOM.为了避免这样的情况再次出现,更换easyPoi为EasyExcel,它是一行一行读,非常节省内存且快速. 首先依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel-core<…