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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//! Example: Dead Letter Queue with Auto-Cleanup TTL
//!
//! This example shows how to configure DLQ (Dead Letter Queue) with automatic cleanup.
//! Messages that exhaust all retries are sent to DLQ and automatically removed after TTL expires.
//!
//! **Benefits:**
//! - Automatic cleanup of failed messages (prevents DLQ bloat)
//! - Configurable retention period (can set per-consumer)
//! - No manual intervention needed for old failed messages
//! - Useful for high-volume systems
use ;
use ;
use Duration;
use info;
async
/// ## Detailed Flow
///
/// **Message Lifecycle with DLQ TTL:**
///
/// ```text
/// Task arrives in queue
/// ↓
/// Handler processes message
/// ├─ SUCCESS? → ACK message (done)
/// └─ FAIL? → Retry logic triggered
/// ├─ Retry attempt < max_retries?
/// │ └─ YES → Send to retry queue (exponential backoff: 1s→2s→4s→8s→16s)
/// │ ↓
/// │ After delay, message returns to original queue
/// │ ↓
/// │ Try processing again
/// │
/// └─ NO (retries exhausted)
/// └─ Send to DLQ (task_queue.dlq)
/// ├─ Message stored in DLQ
/// ├─ TTL: 86400 seconds (1 day)
/// ├─ After 1 day: message auto-deleted by RabbitMQ
/// └─ No manual cleanup needed!
/// ```
///
/// ## DLQ TTL Options
///
/// **1 Hour (Fresh Failed Messages):**
/// ```ignore
/// .with_dlq_ttl(Duration::from_secs(3600))
/// ```
///
/// **1 Day (Default for most systems):**
/// ```ignore
/// .with_dlq_ttl(Duration::from_secs(86400))
/// ```
///
/// **1 Week (Long retention for analysis):**
/// ```ignore
/// .with_dlq_ttl(Duration::from_secs(604800))
/// ```
///
/// **No TTL (Manual cleanup only):**
/// ```ignore
/// // Don't call .with_dlq_ttl() - DLQ messages persist indefinitely
/// ```
///
/// ## RabbitMQ Management Console
///
/// You can monitor DLQ and verify TTL:
///
/// 1. Go to http://localhost:15672
/// 2. Login (default: guest/guest)
/// 3. Go to "Queues"
/// 4. Find "task_queue.dlq" queue
/// 5. Check "x-message-ttl" in queue details
/// 6. See "Message count" to monitor failed messages
/// 7. Watch as messages auto-expire after TTL