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
```rust
use std::sync::Arc;
use deadpoollapin::{Config, Manager, Pool };
use deadpoollapin::lapin::{
options::BasicPublishOptions,
BasicProperties
};
use tokio::runtime::Runtime;
use tokio_amqp::LapinTokioExt;
fn main() -> Result<(), Box> {
let rt = Arc::new(Runtime::new()?);
let mut cfg = Config::default();
cfg.url = Some("amqp://localhost/%2f".tostring());
cfg.connectionproperties = lapin::ConnectionProperties::default()
.withtokio(rt.clone());
let pool = cfg.createpool();
rt.blockon(async move {
for i in 1..10usize {
let mut connection = pool.get().await?;
let channel = connection.createchannel().await?;
channel.basicpublish(
"",
"hello",
BasicPublishOptions::default(),
b"hello from deadpool".tovec(),
BasicProperties::default()
).await?;
}
Ok(())
})
}
```
Example with config
, dotenv
and tokio-amqp
crate
```rust
use std::sync::Arc;
use deadpoollapin::lapin::{
options::BasicPublishOptions,
BasicProperties
};
use dotenv::dotenv;
use serde::Deserialize;
use tokio::runtime::Runtime;
use tokioamqp::LapinTokioExt;
[derive(Debug, Deserialize)]
struct Config {
#[serde(default)]
amqp: deadpool_lapin::Config
}
impl Config {
pub fn fromenv() -> Result {
let mut cfg = ::configcrate::Config::new();
cfg.merge(::configcrate::Environment::new().separator(""))?;
cfg.tryinto()
}
}
fn main() -> Result<(), Box> {
dotenv().ok();
let rt = Arc::new(Runtime::new()?);
let mut cfg = Config::fromenv().unwrap();
cfg.amqp.connectionproperties = lapin::ConnectionProperties::default()
.withtokio(rt.clone());
let pool = cfg.amqp.createpool();
rt.blockon(async move {
for i in 1..10usize {
let mut connection = pool.get().await?;
let channel = connection.createchannel().await?;
channel.basicpublish(
"",
"hello",
BasicPublishOptions::default(),
b"hello from deadpool".tovec(),
BasicProperties::default()
).await?;
}
Ok(())
})
}
```
License
Licensed under either of
at your option.