Skip to content
AMQP client library in Rust, with a clean, futures based API
Branch: master
Clone or download
Keruspe v0.27.0-beta.4
Signed-off-by: Marc-Antoine Perennou <>
Latest commit d80bd98 Aug 23, 2019
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 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 for cookie-factory depend… Mar 17, 2017 silence clippy warnings Aug 22, 2019 cargo fmt Aug 20, 2019
logo.jpg add a logo Mar 21, 2017

Build Status Coverage Status LICENSE Dependency Status

lapin, a Rust AMQP client library Version

This project follows the AMQP 0.9.1 specifications, targetting especially RabbitMQ.

lapin is available on and can be included in your Cargo enabled project like this:

lapin = "^0.27"

Then include it in your code like this:

use lapin;


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

use crate::lapin::{
  BasicProperties, Channel, Connection, ConnectionProperties, ConsumerDelegate,

struct Subscriber {
  channel: Channel,

impl ConsumerDelegate for Subscriber {
  fn on_new_delivery(&self, delivery: Delivery) {, BasicAckOptions::default()).into_error().expect("basic_ack");

fn main() {

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


  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 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 and can be included in your Cargo enabled project like this:

lapin-futures = "^0.27"

Then include it in your code like this:

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