1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//! [Lapin](https://github.com/CleverCloud/lapin) wrapper that encapsulates the connections/channels
//! handling making it easier to use and less error prone.
//!
//! Here is an example using the tokio runtime:
//! ```no_run
//! use amqp_manager::prelude::*;
//! use futures::FutureExt;
//! use tokio_amqp::LapinTokioExt;
//!
//! #[tokio::main]
//! async fn main() {
//! let conn = Connection::connect("amqp://guest:guest@127.0.0.1:5672//", ConnectionProperties::default().with_tokio()).await.unwrap();
//! let amqp_manager = AmqpManager::default();
//! let amqp_session = amqp_manager.get_session(&conn).await.expect("Should create AmqpSession instance");
//!
//! let queue_name = "queue-name";
//! let create_queue_op = CreateQueue {
//! queue_name: &queue_name,
//! options: QueueDeclareOptions {
//! auto_delete: false,
//! ..Default::default()
//! },
//! ..Default::default()
//! };
//! amqp_session.create_queue(create_queue_op.clone()).await.expect("create_queue");
//!
//! amqp_session
//! .publish_to_routing_key(PublishToRoutingKey {
//! routing_key: &queue_name,
//! payload: "Hello World".as_bytes(),
//! ..Default::default()
//! })
//! .await
//! .expect("publish_to_queue");
//!
//! amqp_session
//! .create_consumer_with_delegate(
//! CreateConsumer {
//! queue_name: &queue_name,
//! consumer_name: "consumer-name",
//! ..Default::default()
//! },
//! |delivery: DeliveryResult| async {
//! if let Ok(Some((channel, delivery))) = delivery {
//! let payload = std::str::from_utf8(&delivery.data).unwrap();
//! assert_eq!(payload, "Hello World");
//! channel
//! .basic_ack(delivery.delivery_tag, BasicAckOptions::default())
//! .map(|_| ())
//! .await;
//! }
//! },
//! )
//! .await
//! .expect("create_consumer");
//!
//! let queue = amqp_session.create_queue(create_queue_op.clone()).await.expect("create_queue");
//! assert_eq!(queue.message_count(), 0, "Messages has been consumed");
//! }
//! ```
use crateConfirmSelectOptions;
use crate;
use crate;
use crateAmqpSession;
/// A type alias of the lapin's `Result` type.
pub type AmqpResult<T> = Result;
/// The struct that handles the connection pool.
;