Crate deadpool_lapin[][src]

Expand description

Deadpool for Lapin Latest Version Unsafe forbidden Rust 1.54+

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

This crate implements a deadpool manager for lapin.

Features

FeatureDescriptionExtra dependenciesDefault
rt_tokio_1Enable support for tokio cratedeadpool/rt_tokio_1yes
rt_async-std_1Enable support for async-std cratedeadpool/rt_async-std_1no
serdeEnable support for serde cratedeadpool/serde, serde/deriveno

Example with tokio-amqp crate

use std::sync::Arc;

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

#[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".to_vec(),
            BasicProperties::default(),
        ).await?;
    }
    Ok(())
}

Example with config, dotenv and tokio-amqp crate

use std::sync::Arc;

use deadpool_lapin::Runtime;
use deadpool_lapin::lapin::{
    options::BasicPublishOptions,
    BasicProperties,
};
use dotenv::dotenv;

#[derive(Debug, serde::Deserialize)]
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".to_vec(),
            BasicProperties::default(),
        ).await?;
    }
    Ok(())
}

License

Licensed under either of

at your option.

Re-exports

pub use lapin;

Structs

Configuration object.

Manager for creating and recycling lapin::Connection.

Statistics regarding an object returned by the pool

Pool configuration.

The current pool status.

Timeouts when getting Objects from a Pool.

Enums

Enumeration for picking a runtime implementation.

Type Definitions

This error is returned if there is something wrong with the lapin configuration.

Type alias for [‘Object’]

Type alias for using deadpool::managed::Hook with lapin.

Type alias for using deadpool::managed::HookError with lapin.

Type alias for using deadpool::managed::Object with lapin.

Type alias for using deadpool::managed::Pool with lapin.

Type alias for using deadpool::managed::PoolError with lapin.