4个版本

0.1.5 2024年6月10日
0.1.4 2024年6月9日
0.1.3 2024年3月24日
0.1.1 2023年7月8日
0.1.0 2023年4月8日

#1331 in 异步

Download history 287/week @ 2024-06-07 34/week @ 2024-06-14

每月468次下载

MIT许可

12KB
279 代码行

Alicemq_amqprs

这是对官方AMQPRS库的一个简单的包装器/适配器实现

查看项目: https://github.com/gftea/amqprs

这是一个有趣的学习项目,也是将我的Rustlang当前知识付诸实践的方式。

要使用该库,您必须首先创建事件队列及其特定的处理程序。每个处理程序都必须是一个只接收类型 String 的函数。

本地运行RabbitMQ

要运行RabbitMQ的本地实例,请使用以下命令

rabbitmq-server

要创建智能发布者/订阅者,请首先导入所需的类型。

use tracing::{debug, Level};
use alicemq::clients::consumer_client::ConsumerManager;
use alicemq::consumers::base_consumer::BaseConsumer;
use tracing_subscriber::FmtSubscriber;

实现自定义消费者处理程序。

目前支持非阻塞异步消费者。要定义处理程序,请遵循以下结构

async fn my_callback(data: Vec<u8>) {
    debug!("Received data: {:?}", String::from_utf8(data));
}

fn set_tracing_subscriber() {
    let subscriber = FmtSubscriber::builder()
        .with_max_level(Level::TRACE)
        .finish();
    tracing::subscriber::set_global_default(subscriber)
        .expect("setting default subscriber failed");
}

创建智能长生存期消费者

要创建消费者,请使用消费者管理器,并定义它是否为长生存期。定义队列及其相应的回调处理程序。

#[tokio::main]
async fn main() {
    let _ = set_tracing_subscriber();
    let mut _manager: ConsumerManager = ConsumerManager::new_instance()
        .connect().await;
    _manager.set_queue("test_queue", BaseConsumer::new(my_callback), None).await;
    _manager.set_queue("another_test_queue", BaseConsumer::new(my_callback), None).await;
    _manager.run(true).await;
}

要创建智能发布者,只需创建智能发布者的实例。支持传递的数据,仅限字符串。

创建智能发布者

use tracing::Level;
use tracing_subscriber::FmtSubscriber;
use alicemq::clients::publisher_client::Publisher;

fn set_tracing_subscriber() {
    let subscriber = FmtSubscriber::builder()
        .with_max_level(Level::TRACE)
        .finish();
    tracing::subscriber::set_global_default(subscriber)
        .expect("setting default subscriber failed");
}

#[tokio::main]
async fn main() {
    let _ = set_tracing_subscriber();
    for i in 1..10 {
        let _ = Publisher::send_message(
            format!("This message contains the id {}", i), String::from("test_queue")
        ).await;
    }
}

运行示例

要运行文件夹中的任何示例,请运行以下命令

cargo run --example my_example

依赖项

~9–19MB
~240K SLoC