This project follows the AMQP 0.9.1 specifications, targetting especially RabbitMQ.
lapin is available on crates.io and can be included in your Cargo enabled project like this:
toml
[dependencies]
lapin = "^0.27"
Then include it in your code like this:
rust
use lapin;
```rust use env_logger; use lapin; use log::info;
use crate::lapin::{ BasicProperties, Channel, Connection, ConnectionProperties, ConsumerDelegate, message::Delivery, options::*, types::FieldTable, };
struct Subscriber { channel: Channel, }
impl ConsumerDelegate for Subscriber { fn onnewdelivery(&self, delivery: Delivery) { self.channel.basicack(delivery.deliverytag, BasicAckOptions::default()).wait().expect("basic_ack"); } }
fn main() { env_logger::init();
let addr = std::env::var("AMQPADDR").unwraporelse(|| "amqp://127.0.0.1:5672/%2f".into()); let conn = Connection::connect(&addr, ConnectionProperties::default()).wait().expect("connection error");
info!("CONNECTED");
let channela = conn.createchannel().wait().expect("createchannel"); let channelb = conn.createchannel().wait().expect("createchannel");
channela.queuedeclare("hello", QueueDeclareOptions::default(), FieldTable::default()).wait().expect("queuedeclare"); channelb.queuedeclare("hello", QueueDeclareOptions::default(), FieldTable::default()).wait().expect("queuedeclare");
info!("will consume"); channelb.clone().basicconsume("hello", "myconsumer", BasicConsumeOptions::default(), FieldTable::default()).wait().expect("basicconsume").setdelegate(Box::new(Subscriber { channel: channelb }));
let payload = b"Hello world!";
loop { channela.basicpublish("", "hello", BasicPublishOptions::default(), payload.tovec(), BasicProperties::default()).wait().expect("basicpublish"); } }
```
a library with a futures-0.1 based API, that you can use with executors such as tokio or futures-cpupool.
lapin-futures is available on crates.io and can be included in your Cargo enabled project like this:
toml
[dependencies]
lapin-futures = "^0.27"
Then include it in your code like this:
rust
use lapin_futures;