Skip to main content

easy_rmq_rs/
lib.rs

1pub mod error;
2pub mod middleware;
3pub mod pool;
4pub mod publisher;
5pub mod registry;
6pub mod subscriber;
7pub mod traits;
8pub mod utils;
9pub mod worker;
10
11pub use error::{AmqpError, Result};
12pub use middleware::{
13    Middleware, get_execution_time_us, get_headers,
14};
15pub use pool::{ChannelPool, create_pool};
16pub use publisher::Publisher;
17pub use registry::SubscriberRegistry;
18pub use subscriber::Subscriber;
19pub use traits::AmqpPublisher;
20pub use utils::{default_exchange_for_kind, generate_trace_id};
21pub use worker::{
22    BuiltWorker, Data, WorkerBuilder,
23};
24
25use std::sync::Arc;
26
27pub struct AmqpClient {
28    channel_pool: Arc<ChannelPool>,
29}
30
31impl AmqpClient {
32    pub fn new(uri: String, connection_name: String, max_size: usize) -> Result<Self> {
33        let pool = Arc::new(create_pool(uri, connection_name, max_size)?);
34        let channel_pool = Arc::new(ChannelPool::new(pool));
35
36        Ok(Self { channel_pool })
37    }
38
39    pub async fn get_channel(&self) -> Result<lapin::Channel> {
40        self.channel_pool.get_channel().await
41    }
42
43    pub fn publisher(&self) -> Publisher {
44        Publisher::new(self.channel_pool.clone())
45    }
46
47    pub fn channel_pool(&self) -> Arc<ChannelPool> {
48        self.channel_pool.clone()
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::*;
55
56    #[test]
57    fn test_create_client() {
58        let client = AmqpClient::new("amqp://guest:guest@localhost:5672".to_string(), "test-connection".to_string(), 10);
59        assert!(client.is_ok());
60    }
61}