deadpool-lapin 0.7.0

Dead simple async pool for lapin
Documentation

Deadpool for Lapin Latest Version

Deadpool is a dead simple async pool for connections and objects of any type.

This crate implements a deadpool manager for lapin.

Features

Feature Description Extra dependencies Default
config Enable support for config crate config, serde/derive yes

Example with tokio-amqp crate

use std::sync::Arc;

use deadpool_lapin::{Config, Manager, Pool };
use deadpool_lapin::lapin::{
    options::BasicPublishOptions,
    BasicProperties
};
use tokio::runtime::Runtime;
use tokio_amqp::LapinTokioExt;

#[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".to_string());
    cfg.connection_properties = lapin::ConnectionProperties::default()
            .with_tokio();
    let pool = cfg.create_pool();
    for i in 1..10usize {
        let mut connection = pool.get().await?;
        let channel = connection.create_channel().await?;
        channel.basic_publish(
            "",
            "hello",
            BasicPublishOptions::default(),
            b"hello from deadpool".to_vec(),
            BasicProperties::default()
        ).await?;
    }
    Ok(())
}

Example with config, dotenv and tokio-amqp crate

use std::sync::Arc;

use deadpool_lapin::lapin::{
    options::BasicPublishOptions,
    BasicProperties
};
use dotenv::dotenv;
use serde::Deserialize;
use tokio_amqp::LapinTokioExt;

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

impl Config {
    pub fn from_env() -> Result<Self, ::config_crate::ConfigError> {
        let mut cfg = ::config_crate::Config::new();
        cfg.merge(::config_crate::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();
    cfg.amqp.connection_properties = lapin::ConnectionProperties::default()
            .with_tokio();
    let pool = cfg.amqp.create_pool();
    for i in 1..10usize {
        let mut connection = pool.get().await?;
        let channel = connection.create_channel().await?;
        channel.basic_publish(
            "",
            "hello",
            BasicPublishOptions::default(),
            b"hello from deadpool".to_vec(),
            BasicProperties::default()
        ).await?;
    }
    Ok(())
}

License

Licensed under either of

at your option.