Skip to content
/ lapin Public
forked from amqp-rs/lapin

AMQP client library in Rust, with a clean, futures based API

License

Notifications You must be signed in to change notification settings

d502e19/lapin

 
 

Repository files navigation

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;

About

AMQP client library in Rust, with a clean, futures based API

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 100.0%