#async-pool #lapin #pool #amqp #async #rabbitmq

已删除 cl-deadpool-lapin2

为 lapin 设计的简单异步连接和对象池

0.10.0 2022年2月23日

#21 in #lapin

MIT/Apache

85KB
1.5K SLoC

Deadpool 是一个用于任何类型连接和对象的简单异步池。 最新版本 禁止不安全 Rust 1.54+

Deadpool 是一个简单的异步连接和对象池。

此包实现了一个 deadpool 管理器,用于 lapin.

功能

功能 描述 额外依赖 默认
rt_tokio_1 启用对 tokio 包的支持 deadpool/rt_tokio_1
rt_async-std_1 启用对 async-std 包的支持 deadpool/rt_async-std_1
serde 启用对 serde 包的支持 deadpool/serde, serde/derive

使用 tokio-amqp 包的示例

use std::sync::Arc;

use deadpool_lapin::{Config, Manager, Pool, Runtime};
use deadpool_lapin::lapin::{
    options::BasicPublishOptions,
    BasicProperties,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut cfg = Config::default();
    cfg.url = Some("amqp://127.0.0.1:5672/%2f".into());
    let pool = cfg.create_pool(Some(Runtime::Tokio1))?;
    for _ in 1..10 {
        let mut connection = pool.get().await?;
        let channel = connection.create_channel().await?;
        channel.basic_publish(
            "",
            "hello",
            BasicPublishOptions::default(),
            b"hello from deadpool",
            BasicProperties::default(),
        ).await?;
    }
    Ok(())
}

使用 configdotenvtokio-amqp 包的示例

use std::sync::Arc;

use deadpool_lapin::Runtime;
use deadpool_lapin::lapin::{
    options::BasicPublishOptions,
    BasicProperties,
};
use dotenv::dotenv;
# use serde_1 as serde;

#[derive(Debug, serde::Deserialize)]
# #[serde(crate = "serde_1")]
struct Config {
    #[serde(default)]
    amqp: deadpool_lapin::Config
}

impl Config {
    pub fn from_env() -> Result<Self, config::ConfigError> {
        let mut cfg = config::Config::new();
        cfg.merge(config::Environment::new().separator("__"))?;
        cfg.try_into()
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    dotenv().ok();
    let mut cfg = Config::from_env().unwrap();
    let pool = cfg.amqp.create_pool(Some(Runtime::Tokio1)).unwrap();
    for _ in 1..10 {
        let mut connection = pool.get().await?;
        let channel = connection.create_channel().await?;
        channel.basic_publish(
            "",
            "hello",
            BasicPublishOptions::default(),
            b"hello from deadpool",
            BasicProperties::default(),
        ).await?;
    }
    Ok(())
}

许可证

根据您的要求,许可协议为

任选其一。

依赖关系

~9–21MB
~325K SLoC