#amqp-client #tokio

fe2o3-amqp-ws

WebSocket binding stream for AMQP1.0

13 releases (breaking)

0.14.0 May 9, 2025
0.13.0 Oct 3, 2024
0.12.0 Aug 7, 2024
0.11.0 Jun 13, 2024
0.1.2 Jul 30, 2022

#317 in WebSocket

Download history 17859/week @ 2025-12-03 14865/week @ 2025-12-10 10084/week @ 2025-12-17 8163/week @ 2025-12-24 10701/week @ 2025-12-31 16389/week @ 2026-01-07 12180/week @ 2026-01-14 18296/week @ 2026-01-21 19313/week @ 2026-01-28 19774/week @ 2026-02-04 12302/week @ 2026-02-11 20638/week @ 2026-02-18 20980/week @ 2026-02-25 23422/week @ 2026-03-04 22946/week @ 2026-03-11 12366/week @ 2026-03-18

85,213 downloads per month
Used in 5 crates (2 directly)

MIT/Apache

39KB
651 lines

fe2o3-amqp-ws

WebSocket adapter for AMQP 1.0 websocket binding

This provides a thin wrapper over tokio_tungstenite::WebSocketStream, and the wrapper performs the WebSocket handshake with the "Sec-WebSocket-Protocol" HTTP header set to "amqp".

The wrapper type WebSocketStream could also be used for non-AMQP applications; however, the user should establish websocket stream with raw tokio_tungstenite API and then wrap the stream with the wrapper by fe2o3_amqp_ws::WebSocketStream::from(ws_stream).

Feature flags

default = []
Feature Description
native-tls Enables "tokio-tungstenite/native-tls"
native-tls-vendored Enables "tokio-tungstenite/native-tls-vendored"
rustls-tls-native-roots Enables "tokio-tungstenite/rustls-tls-native-roots"
rustls-tls-webpki-roots Enables "tokio-tungstenite/rustls-tls-webpki-roots"

Example

use fe2o3_amqp::{
    types::{messaging::Outcome, primitives::Value},
    Connection, Delivery, Receiver, Sender, Session,
};
use fe2o3_amqp_ws::WebSocketStream;

#[tokio::main]
async fn main() {
    let ws_stream = WebSocketStream::connect("ws://localhost:5673")
        .await
        .unwrap();
    let mut connection = Connection::builder()
        .container_id("connection-1")
        .open_with_stream(ws_stream)
        .await
        .unwrap();
    let mut session = Session::begin(&mut connection).await.unwrap();

    let mut sender = Sender::attach(&mut session, "rust-sender-link-1", "q1")
        .await
        .unwrap();
    let mut receiver = Receiver::attach(&mut session, "rust-recver-1", "q1")
        .await
        .unwrap();

    let fut = sender.send_batchable("hello batchable AMQP").await.unwrap();

    let delivery: Delivery<Value> = receiver.recv().await.unwrap();
    receiver.accept(&delivery).await.unwrap();

    let outcome: Outcome = fut.await.unwrap();
    outcome.accepted_or_else(|state| state).unwrap(); // Handle delivery outcome

    sender.close().await.unwrap();
    receiver.close().await.unwrap();
    session.end().await.unwrap();
    connection.close().await.unwrap();
}

WebAssembly support

Experimental support for wasm32-unknown-unknown target has been added since "0.3.0" and uses a web_sys::WebSocket internally. An example of this can be found in examples/wasm32-in-browser.

License: MIT/Apache-2.0

Dependencies

~2–11MB
~233K SLoC