qrusty_client 0.13.0

A Rust client for the qrusty priority queue server.
Documentation

qrusty_client

A Rust client for the qrusty priority queue server.

Features

  • HTTP API client (QrustyClient) — publish, consume, ack/nack, queue management, stats
  • WebSocket client (WsSession) — push-based delivery with concurrent ack/nack/publish over a single connection
  • Automatic retries with exponential back-off for transient HTTP errors
  • Async-first via Tokio

Installation

Add to your Cargo.toml:

[dependencies]
qrusty_client = "0.6"

HTTP client

use qrusty_client::client::QrustyClient;

#[tokio::main]
async fn main() {
    let client = QrustyClient::new("http://localhost:6784");

    client.create_queue("orders", "MaxFirst").await.unwrap();
    let id = client.publish("orders", 100, r#"{"order_id":1}"#, None).await.unwrap();

    if let Some(msg) = client.consume("orders", "worker-1", None).await.unwrap() {
        client.ack("orders", &msg.id, "worker-1").await.unwrap();
    }
}

WebSocket client

WsSession maintains a single connection and demultiplexes frames internally, so publish, ack, nack, and subscribe can all be called concurrently without deadlocking.

use qrusty_client::ws::{WsSession, DeliveredMessage};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let session = WsSession::connect("ws://localhost:6784").await?;

    // Publish a message.
    let id = session.publish("orders", r#"{"order_id":1}"#, Some(10)).await?;
    println!("published {}", id);

    // Subscribe and process messages, acking each one on the same session.
    let mut rx = session.subscribe("orders").await?;
    while let Some(Ok(msg)) = rx.recv().await {
        println!("received {} from {}", msg.payload, msg.queue);
        session.ack(&msg.queue, &msg.id).await?;
    }

    session.close().await?;
    Ok(())
}

Development

cargo test
cargo publish  # requires a crates.io token: cargo login <your-token>

Documentation

See docs.rs/qrusty_client for full API documentation.

License

MIT