rabbitmq-with-retry-and-dlq 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,6 +10,7 @@ A production-ready TypeScript RabbitMQ library with automatic retry, exponential
10
10
  - 🔌 **Auto-Reconnection** - Handles network issues automatically
11
11
  - 📦 **TypeScript** - Full type safety
12
12
  - 🎯 **Exchange Support** - Direct, topic, fanout, headers
13
+ - 🏭 **Industry Best Practice** - Separation of concerns (Publisher→Exchange, Consumer→Queue)
13
14
 
14
15
  ## Installation
15
16
 
@@ -64,6 +65,116 @@ await publisher.publishToQueue({
64
65
  });
65
66
  ```
66
67
 
68
+ ---
69
+
70
+ ## Industry Best Practice: Separation of Concerns
71
+
72
+ This library follows the RabbitMQ best practice pattern:
73
+
74
+ - **Publisher** → Owns **Exchanges** (knows the topic/domain)
75
+ - **Consumer** → Owns **Queues** and **Bindings** (decides what to subscribe to)
76
+
77
+ This is cleaner because:
78
+ 1. Publishers don't need to know about queues
79
+ 2. Consumers can create their own queues and choose their bindings
80
+ 3. Multiple consumers can bind differently to the same exchange
81
+
82
+ ### Publisher: Assert Exchange
83
+
84
+ ```typescript
85
+ import { publisher } from 'rabbitmq-with-retry-and-dlq';
86
+
87
+ // Assert a single exchange
88
+ await publisher.assertExchange('orders');
89
+
90
+ // Assert with exchange type
91
+ await publisher.assertExchange('events', { exchangeType: 'topic' });
92
+
93
+ // Assert multiple exchanges
94
+ await publisher.assertExchange(['orders', 'payments', 'notifications']);
95
+
96
+ // With options
97
+ await publisher.assertExchange('orders', {
98
+ exchangeType: 'direct', // 'direct' | 'topic' | 'fanout' | 'headers' (default: 'direct')
99
+ durable: true, // Survives broker restart (default: true)
100
+ });
101
+ ```
102
+
103
+ ### Consumer: Assert Queues
104
+
105
+ ```typescript
106
+ import { consumer } from 'rabbitmq-with-retry-and-dlq';
107
+
108
+ // Assert a single queue
109
+ await consumer.assertQueues('orders-worker');
110
+
111
+ // Assert multiple queues
112
+ await consumer.assertQueues(['orders-worker', 'payments-worker']);
113
+
114
+ // Assert queue with retry/DLQ configuration
115
+ await consumer.assertQueues('orders-worker', {
116
+ durable: true, // Queue survives restart (default: true)
117
+ retryConfig: {
118
+ maxRetries: 5,
119
+ retryDelayMs: 2000,
120
+ backoffStrategy: 'exponential',
121
+ },
122
+ });
123
+ ```
124
+
125
+ ### Consumer: Bind Queue to Exchange
126
+
127
+ ```typescript
128
+ // Bind queue to exchange with routing key
129
+ await consumer.bindQueue('orders-worker', 'orders', 'order.created');
130
+
131
+ // Bind with pattern (for topic exchanges)
132
+ await consumer.bindQueue('all-orders', 'events', 'order.*');
133
+
134
+ // Multiple bindings to same queue
135
+ await consumer.bindQueue('orders-worker', 'orders', 'order.created');
136
+ await consumer.bindQueue('orders-worker', 'orders', 'order.updated');
137
+ ```
138
+
139
+ ### Complete Best Practice Example
140
+
141
+ ```typescript
142
+ // === PUBLISHER SIDE ===
143
+ // Publisher only creates exchanges (doesn't know about queues)
144
+ await publisher.assertExchange('orders', { exchangeType: 'topic' });
145
+
146
+ await publisher.publishToExchange({
147
+ exchangeName: 'orders',
148
+ routingKey: 'order.created',
149
+ queueName: 'orders-processor', // For retry config lookup only
150
+ message: { orderId: 123, amount: 99.99 },
151
+ });
152
+
153
+ // === CONSUMER SIDE ===
154
+ // Consumer creates its own queues and decides what to subscribe to
155
+ await consumer.assertQueues('orders-processor', {
156
+ retryConfig: { maxRetries: 3, retryDelayMs: 5000 }
157
+ });
158
+
159
+ // Bind to exchange (consumer decides which routing keys to receive)
160
+ await consumer.bindQueue('orders-processor', 'orders', 'order.created');
161
+ await consumer.bindQueue('orders-processor', 'orders', 'order.updated');
162
+
163
+ // Start consuming
164
+ await consumer.consumeQueue({
165
+ queueName: 'orders-processor',
166
+ onMessage: async (message) => {
167
+ console.log('Processing order:', message);
168
+ },
169
+ });
170
+ ```
171
+
172
+ ---
173
+
174
+ ## Alternative: Publisher-Managed Queues
175
+
176
+ For simpler use cases, the publisher can also manage queues (backward compatible):
177
+
67
178
  ### 3. Assert Queues (with Retry Config)
68
179
 
69
180
  **Note:** `assertQueues()` is **idempotent** - it safely skips queues that already exist. You can call it multiple times without errors.
@@ -236,7 +347,7 @@ retryConfig: {
236
347
 
237
348
  ---
238
349
 
239
- ## Complete Example
350
+ ## Complete Example (Best Practice Pattern)
240
351
 
241
352
  ```typescript
242
353
  import express from 'express';
@@ -267,8 +378,12 @@ async function startApp() {
267
378
  console.error('RabbitMQ Error:', errorEvent);
268
379
  });
269
380
 
270
- // 3. Assert queues
271
- await publisher.assertQueues('orders', {
381
+ // 3. Publisher: Assert exchange (publisher owns exchanges)
382
+ await publisher.assertExchange('orders', { exchangeType: 'topic' });
383
+ console.log('✓ Exchange asserted');
384
+
385
+ // 4. Consumer: Assert queues with retry config (consumer owns queues)
386
+ await consumer.assertQueues('orders-processor', {
272
387
  retryConfig: {
273
388
  maxRetries: 5,
274
389
  retryDelayMs: 2000,
@@ -278,9 +393,14 @@ async function startApp() {
278
393
  });
279
394
  console.log('✓ Queues asserted');
280
395
 
281
- // 4. Start consumer
396
+ // 5. Consumer: Bind queue to exchange (consumer decides what to receive)
397
+ await consumer.bindQueue('orders-processor', 'orders', 'order.created');
398
+ await consumer.bindQueue('orders-processor', 'orders', 'order.updated');
399
+ console.log('✓ Queue bindings created');
400
+
401
+ // 6. Start consumer
282
402
  await consumer.consumeQueue({
283
- queueName: 'orders',
403
+ queueName: 'orders-processor',
284
404
  onMessage: async (message) => {
285
405
  console.log('Processing order:', message);
286
406
  await processOrder(message);
@@ -288,7 +408,7 @@ async function startApp() {
288
408
  });
289
409
  console.log('✓ Consumer started');
290
410
 
291
- // 5. Start server
411
+ // 7. Start server
292
412
  app.listen(3000, () => {
293
413
  console.log('✓ Server running on port 3000');
294
414
  });
@@ -299,11 +419,13 @@ async function startApp() {
299
419
  }
300
420
  }
301
421
 
302
- // API endpoint
422
+ // API endpoint - Publisher only knows about exchanges
303
423
  app.post('/orders', async (req, res) => {
304
424
  try {
305
- await publisher.publishToQueue({
306
- queueName: 'orders',
425
+ await publisher.publishToExchange({
426
+ exchangeName: 'orders',
427
+ routingKey: 'order.created',
428
+ queueName: 'orders-processor', // For retry config lookup
307
429
  message: req.body,
308
430
  });
309
431
  res.json({ success: true });
@@ -335,18 +457,71 @@ startApp();
335
457
 
336
458
  ---
337
459
 
460
+ ## API Reference
461
+
462
+ ### Publisher Methods
463
+
464
+ | Method | Description |
465
+ |--------|-------------|
466
+ | `assertExchange(names, options?)` | Create exchange(s) - Publisher owns exchanges |
467
+ | `assertQueues(names, options?)` | Create queue(s) with optional retry config (backward compatible) |
468
+ | `publishToExchange(config)` | Publish to exchange with routing key |
469
+ | `publishToQueue(config)` | Publish directly to queue |
470
+ | `publishBatch(configs)` | Publish multiple messages |
471
+ | `deleteQueues(names, options?)` | Delete queue(s) and related retry/DLQ queues |
472
+ | `close()` | Close publisher connection |
473
+
474
+ ### Consumer Methods
475
+
476
+ | Method | Description |
477
+ |--------|-------------|
478
+ | `assertQueues(names, options?)` | Create queue(s) with optional retry/DLQ config |
479
+ | `bindQueue(queue, exchange, routingKey)` | Bind queue to exchange |
480
+ | `consumeQueue(config)` | Start consuming from queue |
481
+ | `consumeMultipleQueues(config)` | Consume from multiple queues |
482
+ | `consumeWithPattern(exchange, pattern, handler)` | Consume with pattern matching (topic) |
483
+ | `getConsumerStats()` | Get consumer statistics |
484
+ | `close()` | Close consumer connection |
485
+
486
+ ---
487
+
338
488
  ## Additional Options
339
489
 
340
- ### Queue Options
490
+ ### Exchange Options (for assertExchange)
491
+
492
+ ```typescript
493
+ {
494
+ exchangeType: 'direct', // 'direct' | 'topic' | 'fanout' | 'headers' (default: 'direct')
495
+ durable: true, // Exchange survives restart (default: true)
496
+ }
497
+ ```
498
+
499
+ ### Queue Options (for assertQueues)
341
500
 
342
501
  ```typescript
343
502
  {
344
503
  durable: true, // Queue survives restart (default: true)
345
504
  exclusive: false, // Exclusive to connection (default: false)
346
505
  autoDelete: false, // Auto-delete when unused (default: false)
506
+ retryConfig: {...}, // Optional: retry and DLQ configuration
347
507
  }
348
508
  ```
349
509
 
510
+ ### Bind Queue (consumer.bindQueue)
511
+
512
+ ```typescript
513
+ await consumer.bindQueue(
514
+ 'queue-name', // Queue to bind
515
+ 'exchange-name', // Exchange to bind to
516
+ 'routing.key' // Routing key or pattern (for topic exchanges)
517
+ );
518
+
519
+ // Pattern examples for topic exchanges:
520
+ // 'order.*' - matches order.created, order.updated
521
+ // 'order.#' - matches order.created, order.created.v2
522
+ // '*.created' - matches order.created, payment.created
523
+ ```
524
+
350
525
  ### Publish Options
351
526
 
352
527
  ```typescript
@@ -419,8 +594,11 @@ await publisher.deleteQueues('orders', {
419
594
 
420
595
  ### Best Practices
421
596
  - Call `initializeRabbitMQ(url)` once in your setup/helper file
422
- - Set `retryConfig` in `assertQueues()` - auto-used when publishing
423
- - `assertQueues()` is idempotent - safe to call multiple times (skips existing queues)
597
+ - **Use separation of concerns pattern:**
598
+ - Publisher → `assertExchange()` (owns exchanges)
599
+ - Consumer → `assertQueues()` + `bindQueue()` (owns queues and bindings)
600
+ - Set `retryConfig` in `assertQueues()` - auto-used when processing
601
+ - `assertExchange()`, `assertQueues()`, and `bindQueue()` are idempotent - safe to call multiple times
424
602
  - Use exponential backoff with jitter to prevent thundering herd
425
603
  - Always set up error event handlers before consuming
426
604
  - Use graceful shutdown in production
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from 'events';
2
- import { ConsumeConfig, MessageInfo, MultiQueueConsumeConfig, ConnectionOptions } from './types';
2
+ import { ConsumeConfig, MessageInfo, MultiQueueConsumeConfig, ConnectionOptions, RetryConfig } from './types';
3
3
  declare class RabbitMQConsumer extends EventEmitter {
4
4
  private connection?;
5
5
  private channel?;
@@ -41,6 +41,69 @@ declare class RabbitMQConsumer extends EventEmitter {
41
41
  * Check if consumer is connected
42
42
  */
43
43
  isConsumerConnected(): boolean;
44
+ /**
45
+ * Assert/create queues (Best Practice for Consumers)
46
+ * Consumers own their queues and decide what to subscribe to
47
+ *
48
+ * @param queueNames - Single queue name (string) or array of queue names
49
+ * @param options - Queue assertion options
50
+ *
51
+ * @example
52
+ * // Assert a single queue
53
+ * await consumer.assertQueues('orders-worker');
54
+ *
55
+ * @example
56
+ * // Assert multiple queues
57
+ * await consumer.assertQueues(['orders-worker', 'payments-worker']);
58
+ *
59
+ * @example
60
+ * // Assert queue with DLQ setup
61
+ * await consumer.assertQueues('orders-worker', {
62
+ * retryConfig: { maxRetries: 3, retryDelayMs: 5000 }
63
+ * });
64
+ */
65
+ assertQueues(queueNames: string | string[], options?: {
66
+ durable?: boolean;
67
+ exclusive?: boolean;
68
+ autoDelete?: boolean;
69
+ retryConfig?: RetryConfig;
70
+ }): Promise<void>;
71
+ /**
72
+ * Setup retry queue and DLQ for a main queue
73
+ */
74
+ private setupRetryAndDLQQueues;
75
+ /**
76
+ * Bind a queue to an exchange with a routing key (Best Practice for Consumers)
77
+ * Consumers decide which exchanges/routing keys they want to subscribe to
78
+ *
79
+ * @param queueName - Name of the queue to bind
80
+ * @param exchangeName - Name of the exchange to bind to
81
+ * @param routingKey - Routing key or pattern (for topic exchanges)
82
+ *
83
+ * @example
84
+ * // Bind queue to exchange with routing key
85
+ * await consumer.bindQueue('orders-worker', 'orders', 'order.created');
86
+ *
87
+ * @example
88
+ * // Bind with pattern (topic exchange)
89
+ * await consumer.bindQueue('all-orders', 'events', 'order.*');
90
+ */
91
+ bindQueue(queueName: string, exchangeName: string, routingKey: string): Promise<void>;
92
+ /**
93
+ * List of error codes that are considered retryable (transient errors)
94
+ * These errors indicate temporary failures that may succeed on retry
95
+ */
96
+ private static readonly RETRYABLE_ERROR_CODES;
97
+ /**
98
+ * Extract error code from an error object
99
+ * Handles various error formats (Node.js errors, custom errors, HTTP errors)
100
+ */
101
+ private extractErrorCode;
102
+ /**
103
+ * Determine if an error code represents a retryable (transient) error
104
+ * Retryable errors are temporary and may succeed if processed again later
105
+ */
106
+ private isRetryableError;
44
107
  /**
45
108
  * Calculate retry delay based on backoff strategy
46
109
  */
@@ -1 +1 @@
1
- {"version":3,"file":"consumerMq.d.ts","sourceRoot":"","sources":["../consumerMq.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAML,aAAa,EACb,WAAW,EACX,uBAAuB,EAIvB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,cAAM,gBAAiB,SAAQ,YAAY;IACzC,OAAO,CAAC,UAAU,CAAC,CAA6B;IAChD,OAAO,CAAC,OAAO,CAAC,CAAsB;IAC/B,SAAS,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,qBAAqB,CAAC,CAAgB;IAE9C;;;;;;;;;;;;;;;OAeG;gBACS,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAehD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiFjC;;;;OAIG;YACW,gBAAgB;IAsB9B;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACG,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+NpE;;OAEG;IACG,qBAAqB,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAevF;;OAEG;IACG,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,EACvF,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,IAAI,CAAC;IA2DhB;;OAEG;IACH,gBAAgB,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE;IAOjE;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B7B;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAC;;AAC5B,wBAAsC"}
1
+ {"version":3,"file":"consumerMq.d.ts","sourceRoot":"","sources":["../consumerMq.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAML,aAAa,EACb,WAAW,EACX,uBAAuB,EAIvB,iBAAiB,EACjB,WAAW,EACZ,MAAM,SAAS,CAAC;AAGjB,cAAM,gBAAiB,SAAQ,YAAY;IACzC,OAAO,CAAC,UAAU,CAAC,CAA6B;IAChD,OAAO,CAAC,OAAO,CAAC,CAAsB;IAC/B,SAAS,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,qBAAqB,CAAC,CAAgB;IAE9C;;;;;;;;;;;;;;;OAeG;gBACS,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAehD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiFjC;;;;OAIG;YACW,gBAAgB;IAsB9B;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,YAAY,CAChB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAC7B,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,WAAW,CAAC;KACtB,GACL,OAAO,CAAC,IAAI,CAAC;IAoDhB;;OAEG;YACW,sBAAsB;IA8BpC;;;;;;;;;;;;;;;OAeG;IACG,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAehB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CA4B3C;IAEF;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAmCxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACG,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsOpE;;OAEG;IACG,qBAAqB,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAevF;;OAEG;IACG,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,EACvF,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,IAAI,CAAC;IA2DhB;;OAEG;IACH,gBAAgB,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE;IAOjE;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B7B;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAC;;AAC5B,wBAAsC"}
@@ -37,6 +37,7 @@ exports.RabbitMQConsumer = void 0;
37
37
  const amqp = __importStar(require("amqp-connection-manager"));
38
38
  const events_1 = require("events");
39
39
  const types_1 = require("./types");
40
+ const validation_1 = require("./validation");
40
41
  class RabbitMQConsumer extends events_1.EventEmitter {
41
42
  /**
42
43
  * Create a new RabbitMQ Consumer
@@ -176,6 +177,169 @@ class RabbitMQConsumer extends events_1.EventEmitter {
176
177
  isConsumerConnected() {
177
178
  return this.isConnected && !!this.connection && !!this.channel;
178
179
  }
180
+ /**
181
+ * Assert/create queues (Best Practice for Consumers)
182
+ * Consumers own their queues and decide what to subscribe to
183
+ *
184
+ * @param queueNames - Single queue name (string) or array of queue names
185
+ * @param options - Queue assertion options
186
+ *
187
+ * @example
188
+ * // Assert a single queue
189
+ * await consumer.assertQueues('orders-worker');
190
+ *
191
+ * @example
192
+ * // Assert multiple queues
193
+ * await consumer.assertQueues(['orders-worker', 'payments-worker']);
194
+ *
195
+ * @example
196
+ * // Assert queue with DLQ setup
197
+ * await consumer.assertQueues('orders-worker', {
198
+ * retryConfig: { maxRetries: 3, retryDelayMs: 5000 }
199
+ * });
200
+ */
201
+ async assertQueues(queueNames, options = {}) {
202
+ // Auto-connect on first use (lazy loading)
203
+ await this.ensureConnection();
204
+ // Normalize to array
205
+ const queues = Array.isArray(queueNames) ? queueNames : [queueNames];
206
+ const { durable = true, exclusive = false, autoDelete = false, retryConfig, } = options;
207
+ // Validate retry configuration if provided
208
+ if (retryConfig) {
209
+ (0, validation_1.validateRetryConfig)(retryConfig);
210
+ }
211
+ try {
212
+ await this.channel.addSetup(async (ch) => {
213
+ for (const queueName of queues) {
214
+ const queueArgs = {};
215
+ // Setup DLQ arguments if retry config is provided
216
+ if (retryConfig && retryConfig.maxRetries > 0) {
217
+ // Messages that fail will be sent to retry queue
218
+ queueArgs['x-dead-letter-exchange'] = '';
219
+ queueArgs['x-dead-letter-routing-key'] = `${queueName}.retry`;
220
+ }
221
+ await ch.assertQueue(queueName, {
222
+ durable,
223
+ exclusive,
224
+ autoDelete,
225
+ arguments: Object.keys(queueArgs).length > 0 ? queueArgs : undefined,
226
+ });
227
+ console.log(`✓ Queue asserted: ${queueName}`);
228
+ // Setup retry and DLQ queues if retry config is provided
229
+ if (retryConfig) {
230
+ await this.setupRetryAndDLQQueues(ch, queueName, retryConfig);
231
+ }
232
+ }
233
+ });
234
+ console.log(`✓ Successfully asserted ${queues.length} queue(s)`);
235
+ }
236
+ catch (error) {
237
+ console.error('Failed to assert queues:', error);
238
+ throw error;
239
+ }
240
+ }
241
+ /**
242
+ * Setup retry queue and DLQ for a main queue
243
+ */
244
+ async setupRetryAndDLQQueues(ch, queueName, retryConfig) {
245
+ const retryQueueName = `${queueName}.retry`;
246
+ const dlqName = `${queueName}.dlq`;
247
+ // Create retry queue (messages come back to main queue after TTL)
248
+ if (retryConfig.maxRetries > 0) {
249
+ await ch.assertQueue(retryQueueName, {
250
+ durable: true,
251
+ arguments: {
252
+ 'x-dead-letter-exchange': '',
253
+ 'x-dead-letter-routing-key': queueName,
254
+ },
255
+ });
256
+ console.log(`✓ Retry queue asserted: ${retryQueueName}`);
257
+ }
258
+ // Create DLQ (final resting place for failed messages)
259
+ await ch.assertQueue(dlqName, {
260
+ durable: true,
261
+ arguments: {
262
+ 'x-queue-mode': 'lazy',
263
+ },
264
+ });
265
+ console.log(`✓ DLQ asserted: ${dlqName}`);
266
+ }
267
+ /**
268
+ * Bind a queue to an exchange with a routing key (Best Practice for Consumers)
269
+ * Consumers decide which exchanges/routing keys they want to subscribe to
270
+ *
271
+ * @param queueName - Name of the queue to bind
272
+ * @param exchangeName - Name of the exchange to bind to
273
+ * @param routingKey - Routing key or pattern (for topic exchanges)
274
+ *
275
+ * @example
276
+ * // Bind queue to exchange with routing key
277
+ * await consumer.bindQueue('orders-worker', 'orders', 'order.created');
278
+ *
279
+ * @example
280
+ * // Bind with pattern (topic exchange)
281
+ * await consumer.bindQueue('all-orders', 'events', 'order.*');
282
+ */
283
+ async bindQueue(queueName, exchangeName, routingKey) {
284
+ // Auto-connect on first use (lazy loading)
285
+ await this.ensureConnection();
286
+ try {
287
+ await this.channel.addSetup(async (ch) => {
288
+ await ch.bindQueue(queueName, exchangeName, routingKey);
289
+ console.log(`✓ Queue bound: ${queueName} -> ${exchangeName} (${routingKey})`);
290
+ });
291
+ }
292
+ catch (error) {
293
+ console.error('Failed to bind queue:', error);
294
+ throw error;
295
+ }
296
+ }
297
+ /**
298
+ * Extract error code from an error object
299
+ * Handles various error formats (Node.js errors, custom errors, HTTP errors)
300
+ */
301
+ extractErrorCode(error) {
302
+ if (!error)
303
+ return 'UNKNOWN_ERROR';
304
+ // Handle Error objects
305
+ if (error instanceof Error) {
306
+ const err = error;
307
+ // Node.js system errors (ETIMEDOUT, ECONNRESET, etc.)
308
+ if (err.code)
309
+ return String(err.code);
310
+ // HTTP status codes
311
+ if (err.statusCode)
312
+ return `HTTP_${err.statusCode}`;
313
+ if (err.status)
314
+ return `HTTP_${err.status}`;
315
+ // Custom error codes
316
+ if (err.errorCode)
317
+ return String(err.errorCode);
318
+ // Extract from error name
319
+ if (err.name && err.name !== 'Error')
320
+ return err.name;
321
+ // Try to extract from message (e.g., "ETIMEDOUT: connection timed out")
322
+ const match = err.message?.match(/^([A-Z_]+):/);
323
+ if (match)
324
+ return match[1];
325
+ }
326
+ // Handle plain objects with code property
327
+ if (typeof error === 'object' && error !== null) {
328
+ const obj = error;
329
+ if (obj.code)
330
+ return String(obj.code);
331
+ if (obj.errorCode)
332
+ return String(obj.errorCode);
333
+ }
334
+ return 'UNKNOWN_ERROR';
335
+ }
336
+ /**
337
+ * Determine if an error code represents a retryable (transient) error
338
+ * Retryable errors are temporary and may succeed if processed again later
339
+ */
340
+ isRetryableError(errorCode) {
341
+ return RabbitMQConsumer.RETRYABLE_ERROR_CODES.includes(errorCode);
342
+ }
179
343
  /**
180
344
  * Calculate retry delay based on backoff strategy
181
345
  */
@@ -319,6 +483,8 @@ class RabbitMQConsumer extends events_1.EventEmitter {
319
483
  console.log(`[${timestamp}] 💀 Max retries exceeded, moving to DLQ`);
320
484
  // Manually send to DLQ (can't rely on nack because main queue's DLX routes to retry)
321
485
  const dlqName = `${queueName}.dlq`;
486
+ // Extract error code for categorization
487
+ const errorCode = this.extractErrorCode(error);
322
488
  try {
323
489
  await ch.sendToQueue(dlqName, msg.content, {
324
490
  ...msg.properties,
@@ -326,6 +492,9 @@ class RabbitMQConsumer extends events_1.EventEmitter {
326
492
  ...headers,
327
493
  'x-death-reason': 'max-retries-exceeded',
328
494
  'x-death-timestamp': new Date().toISOString(),
495
+ 'x-last-error': errorMessage,
496
+ 'x-last-error-code': errorCode,
497
+ 'x-is-retryable': this.isRetryableError(errorCode) ? 'true' : 'false',
329
498
  }
330
499
  });
331
500
  // Acknowledge original message after successful DLQ send
@@ -472,5 +641,34 @@ class RabbitMQConsumer extends events_1.EventEmitter {
472
641
  }
473
642
  }
474
643
  exports.RabbitMQConsumer = RabbitMQConsumer;
644
+ /**
645
+ * List of error codes that are considered retryable (transient errors)
646
+ * These errors indicate temporary failures that may succeed on retry
647
+ */
648
+ RabbitMQConsumer.RETRYABLE_ERROR_CODES = [
649
+ // Network errors
650
+ 'ETIMEDOUT',
651
+ 'ECONNRESET',
652
+ 'ECONNREFUSED',
653
+ 'ENOTFOUND',
654
+ 'ENETUNREACH',
655
+ 'EHOSTUNREACH',
656
+ 'EPIPE',
657
+ 'EAI_AGAIN',
658
+ // Service availability errors
659
+ 'SERVICE_UNAVAILABLE',
660
+ 'GATEWAY_TIMEOUT',
661
+ 'BAD_GATEWAY',
662
+ // Database errors
663
+ 'DB_CONNECTION_FAILED',
664
+ 'DB_TIMEOUT',
665
+ 'POOL_EXHAUSTED',
666
+ // Rate limiting
667
+ 'RATE_LIMITED',
668
+ 'TOO_MANY_REQUESTS',
669
+ // Temporary failures
670
+ 'TEMPORARY_FAILURE',
671
+ 'RETRY_LATER',
672
+ ];
475
673
  exports.default = new RabbitMQConsumer();
476
674
  //# sourceMappingURL=consumerMq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"consumerMq.js","sourceRoot":"","sources":["../consumerMq.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consumerMq.js","sourceRoot":"","sources":["../consumerMq.ts"],"names":[],"mappings":"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"}