MCPcopy Index your code
hub / github.com/amqp-rs/lapin

github.com/amqp-rs/lapin @v4.10.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v4.10.0 ↗ · + Follow
876 symbols 2,558 edges 133 files 93 documented · 11% updated 39d ago★ 1,2272 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

API Docs Build status Downloads Coverage Status Dependency Status LICENSE

An async AMQP 0-9-1 client library for Rust, targeting RabbitMQ.

Lapin implements the AMQP 0-9-1 specification on top of an async I/O layer. It is runtime-agnostic: the same code works with tokio (default), smol, or async-global-executor.

For full API documentation see docs.rs/lapin.

Quick start

```rust,no_run use futures_lite::stream::StreamExt; use lapin::{ options::*, types::FieldTable, BasicProperties, Connection, ConnectionProperties, Result, };

[tokio::main]

async fn main() -> Result<()> { 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()).await?;
let channel = conn.create_channel().await?;

channel
    .queue_declare("hello".into(), QueueDeclareOptions::durable(), FieldTable::default())
    .await?;

channel
    .basic_publish(
        "".into(),
        "hello".into(),
        BasicPublishOptions::default(),
        b"Hello, world!",
        BasicProperties::default(),
    )
    .await?
    .await?;

let mut consumer = channel
    .basic_consume(
        "hello".into(),
        "my_consumer".into(),
        BasicConsumeOptions::default(),
        FieldTable::default(),
    )
    .await?;

while let Some(delivery) = consumer.next().await {
    let delivery = delivery?;
    delivery.ack(BasicAckOptions::default()).await?;
}
Ok(())

}


## Automatic connection recovery

Pass `.enable_auto_recover()` in `ConnectionProperties` to have lapin
automatically reconnect and replay exchanges, queues, bindings, and consumers
after a network failure:

```rust,no_run
use lapin::ConnectionProperties;

let props = ConnectionProperties::default().enable_auto_recover();

After catching a recoverable error on a channel, call channel.wait_for_recovery(error).await to block until recovery is complete.

Feature flags

Async runtime (pick exactly one)

Flag Notes
tokio (default) Requires a running Tokio runtime
smol Uses the smol executor
async-global-executor Uses async-global-executor

TLS backend (pick at most one)

Flag Notes
rustls (default) TLS via rustls
native-tls TLS via the platform native library
openssl TLS via OpenSSL

Rustls certificate store (when rustls is active)

Flag Notes
rustls-platform-verifier (default) Platform trust store
rustls-native-certs Native root certificates
rustls-webpki-roots-certs Bundled webpki root set

Rustls crypto provider (at least one required)

Flag Notes
rustls--aws_lc_rs (default) Uses aws-lc-rs
rustls--ring Uses ring (more portable)

Miscellaneous

Flag Notes
hickory-dns Hickory DNS resolver (avoids spurious network hangs)
codegen Force protocol code regeneration at build time
verbose-errors More detailed AMQP parser error messages

Custom runtimes

Lapin can use any runtime by supplying an async_rs::Runtime value:

```rust,no_run use lapin::{Connection, ConnectionProperties, Result};

async fn connect_with_custom_runtime() -> Result<()> { let runtime = async_rs::Runtime::tokio_current(); let conn = Connection::connect_with_runtime( "amqp://localhost", ConnectionProperties::default(), runtime, ).await?; drop(conn); Ok(()) } ```

See async-rs for available runtime wrappers.

Extension points exported contracts — how you extend this code

AuthProvider (Interface)
A trait used to integrate custom authentication process during connection [2 implementers]
src/auth.rs
ConsumerDelegate (Interface)
Callback-based alternative to polling a [`Consumer`] stream. Implement this trait and pass your implementation to `Cons [2 …
src/consumer.rs
Connect (Interface)
(no doc) [2 implementers]
src/connection.rs
Cancelable (Interface)
(no doc) [1 implementers]
src/promise.rs
TokenProvider (Interface)
Provider to create tokens used for (OAuth2) auth [1 implementers]
src/auth.rs

Core symbols most depended-on inside this repo

clone
called by 358
src/shared.rs
state_error
called by 74
src/channel_status.rs
can_receive_messages
called by 41
src/channel_status.rs
send_method_frame
called by 36
src/channel.rs
connected
called by 35
src/events.rs
handle_invalid_contents
called by 31
src/channel.rs
find_expected_reply
called by 27
src/frames.rs
send
called by 24
src/internal_rpc.rs

Shape

Method 699
Class 107
Function 49
Enum 16
Interface 5

Languages

Rust100%

Modules by API surface

src/generated/channel.rs102 symbols
src/channel.rs84 symbols
src/internal_rpc.rs38 symbols
src/frames.rs37 symbols
src/consumer.rs35 symbols
src/io_loop.rs32 symbols
src/channel_status.rs29 symbols
src/connection_status.rs27 symbols
src/connection.rs26 symbols
src/channels.rs26 symbols
src/socket_state.rs21 symbols
src/promise.rs21 symbols

For agents

$ claude mcp add lapin \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact