lapin 0.28.1

AMQP client library
Documentation

Build Status Coverage Status LICENSE Dependency Status

lapin, a Rust AMQP client library

Crates.io Version

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:

[dependencies]
lapin = "^0.28"

Then include it in your code like this:

use lapin;

Example

use lapin::{
    message::DeliveryResult, options::*, types::FieldTable, BasicProperties, Channel, Connection,
    ConnectionProperties, ConsumerDelegate,
};
use log::info;

#[derive(Clone, Debug)]
struct Subscriber {
    channel: Channel,
}

impl ConsumerDelegate for Subscriber {
    fn on_new_delivery(&self, delivery: DeliveryResult) {
        if let Ok(Some(delivery)) = delivery {
            self.channel
                .basic_ack(delivery.delivery_tag, BasicAckOptions::default())
                .wait()
                .expect("basic_ack");
        }
    }
}

fn main() {
    env_logger::init();

    let addr = std::env::var("AMQP_ADDR").unwrap_or_else(|_| "amqp://127.0.0.1:5672/%2f".into());
    let conn = Connection::connect(&addr, ConnectionProperties::default())
        .wait()
        .expect("connection error");

    info!("CONNECTED");

    let channel_a = conn.create_channel().wait().expect("create_channel");
    let channel_b = conn.create_channel().wait().expect("create_channel");

    channel_a
        .queue_declare(
            "hello",
            QueueDeclareOptions::default(),
            FieldTable::default(),
        )
        .wait()
        .expect("queue_declare");
    let queue = channel_b
        .queue_declare(
            "hello",
            QueueDeclareOptions::default(),
            FieldTable::default(),
        )
        .wait()
        .expect("queue_declare");

    info!("will consume");
    channel_b
        .clone()
        .basic_consume(
            &queue,
            "my_consumer",
            BasicConsumeOptions::default(),
            FieldTable::default(),
        )
        .wait()
        .expect("basic_consume")
        .set_delegate(Box::new(Subscriber { channel: channel_b }));

    let payload = b"Hello world!";

    loop {
        channel_a
            .basic_publish(
                "",
                "hello",
                BasicPublishOptions::default(),
                payload.to_vec(),
                BasicProperties::default(),
            )
            .wait()
            .expect("basic_publish");
    }
}

lapin-futures

Crates.io Version

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:

[dependencies]
lapin-futures = "^0.28"

Then include it in your code like this:

use lapin_futures;