# rabbit_mqr Extremely simplified [RabbitMQ](https://www.rabbitmq.com/) client built on-top of `lapin`. This crate was mainly created from my cumbersome experience with both `lapin` and `amqprs`. If you simply need a client to publish and asynchronously read messages from a queue, one-by-one, this is the crate for you. There are no consumers, there is a simple API to register queues, and to publish, ack/nack, and read messages from the queue. ## Installation `cargo add rabbit_mqr` ## Requirements - RabbitMQ Deployment: - [Official installation guide](https://www.rabbitmq.com/download.html) - Rust (version 1.6+): - [Official installation guide](https://www.rust-lang.org/tools/install) ## Usage Exposes two structs: - `RabbitMQ`, which is a manager of the queues, and the main access point to publish messages, or to get the inner `Queue`s. - `Queue`, which represents a single `Queue`, and has the basic operations. [Full crate documentation can be found here](https://docs.rs/rabbit_mqr/latest/rabbit_mqr/). ### Basic Example ``` use rabbit_mqr::{GetMessageResult, RabbitMQ}; use std::time::Duration; use tokio::time::sleep; #[tokio::main] async fn main() -> Result<(), rabbit_mqr::lapin::Error> { let mut rabbit_mq = RabbitMQ::new("amqp://guest:guest@localhost:5672/%2f", None).await?; rabbit_mq.register_queue("test_queue", None, None).await?; rabbit_mq .publish_message("test_queue", b"1337".to_vec(), None) .await?; rabbit_mq .publish_message("test_queue", b"1337".to_vec(), None) .await?; if let Some(test_queue) = rabbit_mq.get_queue("test_queue") { while let Some(GetMessageResult { message, delivery_tag, }) = test_queue.get_message().await? { println!("{}", String::from_utf8(message).unwrap()); // Prints: "1337" test_queue.acknowledge_message(delivery_tag).await?; sleep(Duration::from_millis(1337)).await; } } Ok(()) } ``` ## License MIT See `LICENSE.md` ### Third party This crate is built on-top of [`lapin`](https://crates.io/crates/lapin) see their MIT license [here](https://github.com/amqp-rs/lapin/blob/main/LICENSE)