Skip to content
AMQP client library in Rust, with a clean, futures based API
Rust
Branch: master
Clone or download
Keruspe v0.27.0-beta.4
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
Latest commit d80bd98 Aug 23, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples add example of custom tls connection Aug 23, 2019
futures v0.27.0-beta.4 Aug 23, 2019
src Merge branch 'lapin-0.26.x' Aug 23, 2019
templates silence clippy warnings Aug 22, 2019
tests cargo fmt Aug 20, 2019
.editorconfig nuke failure Aug 21, 2019
.gitignore implement `Channel::basic_qos` Aug 22, 2017
.travis.yml v0.26.2 Aug 12, 2019
CHANGELOG.md Merge branch 'lapin-0.26.x' Aug 23, 2019
Cargo.toml v0.27.0-beta.4 Aug 23, 2019
LICENSE add license, description, and use crates.io for cookie-factory depend… Mar 17, 2017
README.md silence clippy warnings Aug 22, 2019
build.rs cargo fmt Aug 20, 2019
logo.jpg add a logo Mar 21, 2017

README.md

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.27"

Then include it in your code like this:

use lapin;

Example

use env_logger;
use lapin;
use log::info;

use crate::lapin::{
  BasicProperties, Channel, Connection, ConnectionProperties, ConsumerDelegate,
  message::Delivery,
  options::*,
  types::FieldTable,
};

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

impl ConsumerDelegate for Subscriber {
  fn on_new_delivery(&self, delivery: Delivery) {
    self.channel.basic_ack(delivery.delivery_tag, BasicAckOptions::default()).into_error().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");
  channel_b.queue_declare("hello", QueueDeclareOptions::default(), FieldTable::default()).wait().expect("queue_declare");

  info!("will consume");
  channel_b.clone().basic_consume("hello", "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.27"

Then include it in your code like this:

use lapin_futures;
You can’t perform that action at this time.