Deadpool for Lapin 
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.