amqp-resilient 1.0.0
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/LICENSE +21 -0
- package/README.md +257 -0
- package/dist/connection/ConnectionManager.d.ts +84 -0
- package/dist/connection/ConnectionManager.d.ts.map +1 -0
- package/dist/connection/ConnectionManager.js +312 -0
- package/dist/connection/ConnectionManager.js.map +1 -0
- package/dist/connection/index.d.ts +2 -0
- package/dist/connection/index.d.ts.map +1 -0
- package/dist/connection/index.js +2 -0
- package/dist/connection/index.js.map +1 -0
- package/dist/consumer/BaseConsumer.d.ts +131 -0
- package/dist/consumer/BaseConsumer.d.ts.map +1 -0
- package/dist/consumer/BaseConsumer.js +398 -0
- package/dist/consumer/BaseConsumer.js.map +1 -0
- package/dist/consumer/index.d.ts +2 -0
- package/dist/consumer/index.d.ts.map +1 -0
- package/dist/consumer/index.js +2 -0
- package/dist/consumer/index.js.map +1 -0
- package/dist/health/HealthService.d.ts +46 -0
- package/dist/health/HealthService.d.ts.map +1 -0
- package/dist/health/HealthService.js +85 -0
- package/dist/health/HealthService.js.map +1 -0
- package/dist/health/index.d.ts +2 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +2 -0
- package/dist/health/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/patterns/CircuitBreaker.d.ts +76 -0
- package/dist/patterns/CircuitBreaker.d.ts.map +1 -0
- package/dist/patterns/CircuitBreaker.js +156 -0
- package/dist/patterns/CircuitBreaker.js.map +1 -0
- package/dist/patterns/index.d.ts +2 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +2 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/publisher/BasePublisher.d.ts +87 -0
- package/dist/publisher/BasePublisher.d.ts.map +1 -0
- package/dist/publisher/BasePublisher.js +275 -0
- package/dist/publisher/BasePublisher.js.map +1 -0
- package/dist/publisher/index.d.ts +2 -0
- package/dist/publisher/index.d.ts.map +1 -0
- package/dist/publisher/index.js +2 -0
- package/dist/publisher/index.js.map +1 -0
- package/dist/types.d.ts +184 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +35 -0
- package/dist/types.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionManager.js","sourceRoot":"","sources":["../../src/connection/ConnectionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Consumer for AMQP
|
|
3
|
+
* Production-ready implementation with:
|
|
4
|
+
* - Automatic retry with exponential backoff
|
|
5
|
+
* - Dead Letter Queue (DLQ) handling
|
|
6
|
+
* - Circuit breaker integration
|
|
7
|
+
* - Message deduplication support
|
|
8
|
+
* - Proper error handling and logging
|
|
9
|
+
*
|
|
10
|
+
* Best Practices:
|
|
11
|
+
* 1. Each consumer gets its own channel
|
|
12
|
+
* 2. Failed messages are retried with exponential backoff
|
|
13
|
+
* 3. Messages exceeding max retries go to DLQ
|
|
14
|
+
* 4. Circuit breaker prevents cascading failures
|
|
15
|
+
* 5. Proper ack/nack handling
|
|
16
|
+
*/
|
|
17
|
+
import type { Channel } from 'amqplib';
|
|
18
|
+
import type { ConnectionManager } from '../connection/ConnectionManager.js';
|
|
19
|
+
import { CircuitBreaker } from '../patterns/CircuitBreaker.js';
|
|
20
|
+
import type { AmqpLogger, ConsumerOptions, MessageContext } from '../types.js';
|
|
21
|
+
/**
|
|
22
|
+
* BaseConsumer - Abstract base class for AMQP consumers
|
|
23
|
+
* Extend this class and implement handle() for your specific use case
|
|
24
|
+
*/
|
|
25
|
+
export declare abstract class BaseConsumer<T = unknown> {
|
|
26
|
+
protected readonly connection: ConnectionManager;
|
|
27
|
+
protected channel: Channel | null;
|
|
28
|
+
protected isInitialized: boolean;
|
|
29
|
+
protected isConsuming: boolean;
|
|
30
|
+
protected consumerTag: string | null;
|
|
31
|
+
protected circuitBreaker: CircuitBreaker | null;
|
|
32
|
+
protected readonly logger: AmqpLogger;
|
|
33
|
+
private readonly queue;
|
|
34
|
+
private readonly exchange;
|
|
35
|
+
private readonly routingKeys;
|
|
36
|
+
private readonly prefetch;
|
|
37
|
+
private readonly maxRetries;
|
|
38
|
+
private readonly initialRetryDelay;
|
|
39
|
+
private readonly maxRetryDelay;
|
|
40
|
+
private readonly exchangeType;
|
|
41
|
+
private readonly useCircuitBreaker;
|
|
42
|
+
constructor(connection: ConnectionManager, options: ConsumerOptions);
|
|
43
|
+
/**
|
|
44
|
+
* Get DLQ name for this consumer
|
|
45
|
+
*/
|
|
46
|
+
protected getDlqName(): string;
|
|
47
|
+
/**
|
|
48
|
+
* Get retry queue name for this consumer
|
|
49
|
+
*/
|
|
50
|
+
protected getRetryQueueName(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Get DLX (Dead Letter Exchange) name
|
|
53
|
+
*/
|
|
54
|
+
protected getDlxName(): string;
|
|
55
|
+
/**
|
|
56
|
+
* Setup exchanges for consumer (main exchange and DLX)
|
|
57
|
+
*/
|
|
58
|
+
private setupExchanges;
|
|
59
|
+
/**
|
|
60
|
+
* Setup queues for consumer (DLQ, retry queue, and main queue)
|
|
61
|
+
*/
|
|
62
|
+
private setupQueues;
|
|
63
|
+
/**
|
|
64
|
+
* Bind queue to exchange with routing keys
|
|
65
|
+
*/
|
|
66
|
+
private bindRoutingKeys;
|
|
67
|
+
/**
|
|
68
|
+
* Initialize the consumer - setup queue, DLQ, and bindings
|
|
69
|
+
*/
|
|
70
|
+
initialize(): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Start consuming messages
|
|
73
|
+
*/
|
|
74
|
+
start(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Handle incoming message with retry logic and circuit breaker
|
|
77
|
+
*/
|
|
78
|
+
private handleMessage;
|
|
79
|
+
/**
|
|
80
|
+
* Parse message content safely
|
|
81
|
+
*/
|
|
82
|
+
private parseMessageContent;
|
|
83
|
+
/**
|
|
84
|
+
* Handle message processing error
|
|
85
|
+
*/
|
|
86
|
+
private handleMessageError;
|
|
87
|
+
/**
|
|
88
|
+
* Build retry headers for message
|
|
89
|
+
*/
|
|
90
|
+
private buildRetryHeaders;
|
|
91
|
+
/**
|
|
92
|
+
* Create temporary retry queue with delay TTL
|
|
93
|
+
*/
|
|
94
|
+
private createTempRetryQueue;
|
|
95
|
+
/**
|
|
96
|
+
* Schedule a message for retry
|
|
97
|
+
*/
|
|
98
|
+
private scheduleRetry;
|
|
99
|
+
/**
|
|
100
|
+
* Calculate retry delay with exponential backoff
|
|
101
|
+
*/
|
|
102
|
+
private calculateRetryDelay;
|
|
103
|
+
/**
|
|
104
|
+
* Get retry count from message headers
|
|
105
|
+
*/
|
|
106
|
+
private getRetryCount;
|
|
107
|
+
/**
|
|
108
|
+
* Process the message - to be implemented by subclasses
|
|
109
|
+
* @param message - Parsed message content
|
|
110
|
+
* @param context - Message context with metadata
|
|
111
|
+
*/
|
|
112
|
+
protected abstract handle(message: T, context: MessageContext): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Stop consuming messages
|
|
115
|
+
*/
|
|
116
|
+
stop(): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Close the consumer and release resources
|
|
119
|
+
*/
|
|
120
|
+
close(): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Get consumer stats
|
|
123
|
+
*/
|
|
124
|
+
getStats(): {
|
|
125
|
+
queue: string;
|
|
126
|
+
isConsuming: boolean;
|
|
127
|
+
isInitialized: boolean;
|
|
128
|
+
circuitBreakerState?: string;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=BaseConsumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseConsumer.d.ts","sourceRoot":"","sources":["../../src/consumer/BaseConsumer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAA2B,MAAM,+BAA+B,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA+B/E;;;GAGG;AACH,8BAAsB,YAAY,CAAC,CAAC,GAAG,OAAO;IAmB1C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB;IAlBlD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IACzC,SAAS,CAAC,aAAa,UAAS;IAChC,SAAS,CAAC,WAAW,UAAS;IAC9B,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5C,SAAS,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAQ;IACvD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAEtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAW;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4C;IACzE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;gBAGvB,UAAU,EAAE,iBAAiB,EAChD,OAAO,EAAE,eAAe;IAyB1B;;OAEG;IACH,SAAS,CAAC,UAAU,IAAI,MAAM;IAI9B;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC;;OAEG;IACH,SAAS,CAAC,UAAU,IAAI,MAAM;IAI9B;;OAEG;YACW,cAAc;IAM5B;;OAEG;YACW,WAAW;IA4BzB;;OAEG;YACW,eAAe;IAW7B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B;;OAEG;YACW,aAAa;IAgD3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;YACW,kBAAkB;IA8ChC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;YACW,oBAAoB;IAelC;;OAEG;YACW,aAAa;IAqC3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAE7E;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACH,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,OAAO,CAAC;QACrB,aAAa,EAAE,OAAO,CAAC;QACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B;CAQF"}
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
import { CircuitBreaker, CircuitBreakerOpenError } from '../patterns/CircuitBreaker.js';
|
|
2
|
+
/** Default retry configuration */
|
|
3
|
+
const DEFAULTS = {
|
|
4
|
+
MAX_RETRIES: 3,
|
|
5
|
+
INITIAL_RETRY_DELAY: 1000,
|
|
6
|
+
MAX_RETRY_DELAY: 30000,
|
|
7
|
+
PREFETCH: 10,
|
|
8
|
+
CIRCUIT_BREAKER_THRESHOLD: 5,
|
|
9
|
+
};
|
|
10
|
+
/** Header names for retry tracking */
|
|
11
|
+
const HEADER = {
|
|
12
|
+
RETRY_COUNT: 'x-retry-count',
|
|
13
|
+
ORIGINAL_EXCHANGE: 'x-original-exchange',
|
|
14
|
+
ORIGINAL_ROUTING_KEY: 'x-original-routing-key',
|
|
15
|
+
FIRST_FAILURE_TIME: 'x-first-failure-time',
|
|
16
|
+
LAST_ERROR: 'x-last-error',
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Type-safe header value getter
|
|
20
|
+
*/
|
|
21
|
+
function getHeaderValue(headers, key) {
|
|
22
|
+
if (!headers) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const entry = Object.entries(headers).find(([k]) => k === key);
|
|
26
|
+
return entry ? entry[1] : undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* BaseConsumer - Abstract base class for AMQP consumers
|
|
30
|
+
* Extend this class and implement handle() for your specific use case
|
|
31
|
+
*/
|
|
32
|
+
export class BaseConsumer {
|
|
33
|
+
connection;
|
|
34
|
+
channel = null;
|
|
35
|
+
isInitialized = false;
|
|
36
|
+
isConsuming = false;
|
|
37
|
+
consumerTag = null;
|
|
38
|
+
circuitBreaker = null;
|
|
39
|
+
logger;
|
|
40
|
+
queue;
|
|
41
|
+
exchange;
|
|
42
|
+
routingKeys;
|
|
43
|
+
prefetch;
|
|
44
|
+
maxRetries;
|
|
45
|
+
initialRetryDelay;
|
|
46
|
+
maxRetryDelay;
|
|
47
|
+
exchangeType;
|
|
48
|
+
useCircuitBreaker;
|
|
49
|
+
constructor(connection, options) {
|
|
50
|
+
this.connection = connection;
|
|
51
|
+
this.queue = options.queue;
|
|
52
|
+
this.exchange = options.exchange;
|
|
53
|
+
this.routingKeys = options.routingKeys;
|
|
54
|
+
this.prefetch = options.prefetch ?? DEFAULTS.PREFETCH;
|
|
55
|
+
this.maxRetries = options.maxRetries ?? DEFAULTS.MAX_RETRIES;
|
|
56
|
+
this.initialRetryDelay = options.initialRetryDelay ?? DEFAULTS.INITIAL_RETRY_DELAY;
|
|
57
|
+
this.maxRetryDelay = options.maxRetryDelay ?? DEFAULTS.MAX_RETRY_DELAY;
|
|
58
|
+
this.exchangeType = options.exchangeType ?? 'topic';
|
|
59
|
+
this.useCircuitBreaker = options.useCircuitBreaker ?? true;
|
|
60
|
+
this.logger = options.logger ?? connection.getLogger();
|
|
61
|
+
// Initialize circuit breaker if enabled
|
|
62
|
+
if (this.useCircuitBreaker) {
|
|
63
|
+
this.circuitBreaker = new CircuitBreaker({
|
|
64
|
+
name: `consumer-${this.queue}`,
|
|
65
|
+
failureThreshold: options.circuitBreakerThreshold ?? DEFAULTS.CIRCUIT_BREAKER_THRESHOLD,
|
|
66
|
+
resetTimeout: 30000,
|
|
67
|
+
successThreshold: 3,
|
|
68
|
+
logger: this.logger,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get DLQ name for this consumer
|
|
74
|
+
*/
|
|
75
|
+
getDlqName() {
|
|
76
|
+
return `${this.queue}.dlq`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get retry queue name for this consumer
|
|
80
|
+
*/
|
|
81
|
+
getRetryQueueName() {
|
|
82
|
+
return `${this.queue}.retry`;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get DLX (Dead Letter Exchange) name
|
|
86
|
+
*/
|
|
87
|
+
getDlxName() {
|
|
88
|
+
return `${this.queue}.dlx`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Setup exchanges for consumer (main exchange and DLX)
|
|
92
|
+
*/
|
|
93
|
+
async setupExchanges() {
|
|
94
|
+
if (!this.channel)
|
|
95
|
+
return;
|
|
96
|
+
await this.channel.assertExchange(this.exchange, this.exchangeType, { durable: true });
|
|
97
|
+
await this.channel.assertExchange(this.getDlxName(), 'direct', { durable: true });
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Setup queues for consumer (DLQ, retry queue, and main queue)
|
|
101
|
+
*/
|
|
102
|
+
async setupQueues() {
|
|
103
|
+
if (!this.channel)
|
|
104
|
+
return;
|
|
105
|
+
// DLQ
|
|
106
|
+
await this.channel.assertQueue(this.getDlqName(), { durable: true, autoDelete: false });
|
|
107
|
+
await this.channel.bindQueue(this.getDlqName(), this.getDlxName(), this.getDlqName());
|
|
108
|
+
// Retry queue
|
|
109
|
+
await this.channel.assertQueue(this.getRetryQueueName(), {
|
|
110
|
+
durable: true,
|
|
111
|
+
autoDelete: false,
|
|
112
|
+
arguments: {
|
|
113
|
+
'x-dead-letter-exchange': this.exchange,
|
|
114
|
+
'x-message-ttl': this.initialRetryDelay,
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
// Main queue
|
|
118
|
+
await this.channel.assertQueue(this.queue, {
|
|
119
|
+
durable: true,
|
|
120
|
+
autoDelete: false,
|
|
121
|
+
arguments: {
|
|
122
|
+
'x-dead-letter-exchange': this.getDlxName(),
|
|
123
|
+
'x-dead-letter-routing-key': this.getDlqName(),
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Bind queue to exchange with routing keys
|
|
129
|
+
*/
|
|
130
|
+
async bindRoutingKeys() {
|
|
131
|
+
if (!this.channel)
|
|
132
|
+
return;
|
|
133
|
+
for (const routingKey of this.routingKeys) {
|
|
134
|
+
await this.channel.bindQueue(this.queue, this.exchange, routingKey);
|
|
135
|
+
this.logger.debug({ queue: this.queue, exchange: this.exchange, routingKey }, 'Queue bound to exchange');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Initialize the consumer - setup queue, DLQ, and bindings
|
|
140
|
+
*/
|
|
141
|
+
async initialize() {
|
|
142
|
+
if (this.isInitialized)
|
|
143
|
+
return;
|
|
144
|
+
try {
|
|
145
|
+
this.channel = await this.connection.createChannel();
|
|
146
|
+
if (this.prefetch) {
|
|
147
|
+
await this.channel.prefetch(this.prefetch);
|
|
148
|
+
}
|
|
149
|
+
await this.setupExchanges();
|
|
150
|
+
await this.setupQueues();
|
|
151
|
+
await this.bindRoutingKeys();
|
|
152
|
+
this.isInitialized = true;
|
|
153
|
+
this.logger.info({
|
|
154
|
+
queue: this.queue,
|
|
155
|
+
exchange: this.exchange,
|
|
156
|
+
routingKeys: this.routingKeys,
|
|
157
|
+
maxRetries: this.maxRetries,
|
|
158
|
+
dlq: this.getDlqName(),
|
|
159
|
+
}, 'Consumer initialized');
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
this.logger.error({ err: error, queue: this.queue }, 'Failed to initialize consumer');
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Start consuming messages
|
|
168
|
+
*/
|
|
169
|
+
async start() {
|
|
170
|
+
if (!this.isInitialized) {
|
|
171
|
+
await this.initialize();
|
|
172
|
+
}
|
|
173
|
+
if (this.isConsuming || !this.channel)
|
|
174
|
+
return;
|
|
175
|
+
const result = await this.channel.consume(this.queue, (msg) => {
|
|
176
|
+
if (!msg)
|
|
177
|
+
return;
|
|
178
|
+
void this.handleMessage(msg);
|
|
179
|
+
}, { noAck: false });
|
|
180
|
+
this.consumerTag = result.consumerTag;
|
|
181
|
+
this.isConsuming = true;
|
|
182
|
+
this.logger.info({ queue: this.queue, consumerTag: this.consumerTag }, 'Consumer started');
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Handle incoming message with retry logic and circuit breaker
|
|
186
|
+
*/
|
|
187
|
+
async handleMessage(msg) {
|
|
188
|
+
const startTime = Date.now();
|
|
189
|
+
const routingKey = msg.fields.routingKey;
|
|
190
|
+
const messageId = msg.properties.messageId || `auto-${Date.now()}`;
|
|
191
|
+
const correlationId = msg.properties.correlationId;
|
|
192
|
+
const retryCount = this.getRetryCount(msg);
|
|
193
|
+
const rawHeaders = msg.properties.headers;
|
|
194
|
+
const headers = rawHeaders ?? {};
|
|
195
|
+
const context = {
|
|
196
|
+
routingKey,
|
|
197
|
+
messageId,
|
|
198
|
+
correlationId,
|
|
199
|
+
retryCount,
|
|
200
|
+
receivedAt: new Date(),
|
|
201
|
+
headers,
|
|
202
|
+
};
|
|
203
|
+
this.logger.debug({ queue: this.queue, routingKey, messageId, correlationId, retryCount }, 'Processing message');
|
|
204
|
+
try {
|
|
205
|
+
// Parse message content
|
|
206
|
+
const content = this.parseMessageContent(msg);
|
|
207
|
+
// Execute with circuit breaker if enabled
|
|
208
|
+
if (this.circuitBreaker) {
|
|
209
|
+
await this.circuitBreaker.execute(async () => {
|
|
210
|
+
await this.handle(content, context);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
await this.handle(content, context);
|
|
215
|
+
}
|
|
216
|
+
// Acknowledge message on success
|
|
217
|
+
this.channel?.ack(msg);
|
|
218
|
+
this.logger.debug({ queue: this.queue, routingKey, messageId, durationMs: Date.now() - startTime }, 'Message processed successfully');
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
await this.handleMessageError(msg, error, context, startTime);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Parse message content safely
|
|
226
|
+
*/
|
|
227
|
+
parseMessageContent(msg) {
|
|
228
|
+
const contentType = msg.properties.contentType;
|
|
229
|
+
const content = msg.content.toString();
|
|
230
|
+
if (contentType === 'application/json' || content.startsWith('{') || content.startsWith('[')) {
|
|
231
|
+
try {
|
|
232
|
+
return JSON.parse(content);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return content;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return content;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Handle message processing error
|
|
242
|
+
*/
|
|
243
|
+
async handleMessageError(msg, error, context, startTime) {
|
|
244
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
245
|
+
const isCircuitBreakerOpen = error instanceof CircuitBreakerOpenError;
|
|
246
|
+
this.logger.error({
|
|
247
|
+
err: error,
|
|
248
|
+
queue: this.queue,
|
|
249
|
+
routingKey: context.routingKey,
|
|
250
|
+
messageId: context.messageId,
|
|
251
|
+
retryCount: context.retryCount,
|
|
252
|
+
durationMs: Date.now() - startTime,
|
|
253
|
+
isCircuitBreakerOpen,
|
|
254
|
+
}, 'Failed to process message');
|
|
255
|
+
// If circuit breaker is open, requeue the message for later
|
|
256
|
+
if (isCircuitBreakerOpen) {
|
|
257
|
+
this.channel?.nack(msg, false, true); // Requeue
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
// Check if we should retry
|
|
261
|
+
if (context.retryCount < this.maxRetries) {
|
|
262
|
+
await this.scheduleRetry(msg, context.retryCount, errorMessage);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
// Max retries exceeded - send to DLQ
|
|
266
|
+
this.logger.warn({
|
|
267
|
+
queue: this.queue,
|
|
268
|
+
messageId: context.messageId,
|
|
269
|
+
retryCount: context.retryCount,
|
|
270
|
+
maxRetries: this.maxRetries,
|
|
271
|
+
}, 'Message exceeded max retries, sending to DLQ');
|
|
272
|
+
this.channel?.nack(msg, false, false); // Don't requeue, let DLQ binding handle it
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Build retry headers for message
|
|
277
|
+
*/
|
|
278
|
+
buildRetryHeaders(msg, newRetryCount, errorMessage) {
|
|
279
|
+
const existingHeaders = msg.properties.headers;
|
|
280
|
+
const firstFailureTime = getHeaderValue(existingHeaders, HEADER.FIRST_FAILURE_TIME);
|
|
281
|
+
const firstFailure = typeof firstFailureTime === 'number' ? firstFailureTime : Date.now();
|
|
282
|
+
return {
|
|
283
|
+
...(existingHeaders || {}),
|
|
284
|
+
[HEADER.RETRY_COUNT]: newRetryCount,
|
|
285
|
+
[HEADER.ORIGINAL_EXCHANGE]: msg.fields.exchange || this.exchange,
|
|
286
|
+
[HEADER.ORIGINAL_ROUTING_KEY]: msg.fields.routingKey,
|
|
287
|
+
[HEADER.FIRST_FAILURE_TIME]: firstFailure,
|
|
288
|
+
[HEADER.LAST_ERROR]: errorMessage.substring(0, 500),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Create temporary retry queue with delay TTL
|
|
293
|
+
*/
|
|
294
|
+
async createTempRetryQueue(delay, routingKey) {
|
|
295
|
+
const tempRetryQueue = `${this.getRetryQueueName()}.${delay}`;
|
|
296
|
+
await this.channel?.assertQueue(tempRetryQueue, {
|
|
297
|
+
durable: true,
|
|
298
|
+
autoDelete: true,
|
|
299
|
+
expires: delay + 60000,
|
|
300
|
+
arguments: {
|
|
301
|
+
'x-dead-letter-exchange': this.exchange,
|
|
302
|
+
'x-dead-letter-routing-key': routingKey,
|
|
303
|
+
'x-message-ttl': delay,
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
return tempRetryQueue;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Schedule a message for retry
|
|
310
|
+
*/
|
|
311
|
+
async scheduleRetry(msg, currentRetryCount, errorMessage) {
|
|
312
|
+
const newRetryCount = currentRetryCount + 1;
|
|
313
|
+
const delay = this.calculateRetryDelay(newRetryCount);
|
|
314
|
+
this.logger.info({
|
|
315
|
+
queue: this.queue,
|
|
316
|
+
messageId: msg.properties.messageId,
|
|
317
|
+
currentRetry: currentRetryCount,
|
|
318
|
+
nextRetry: newRetryCount,
|
|
319
|
+
delayMs: delay,
|
|
320
|
+
}, 'Scheduling message retry');
|
|
321
|
+
try {
|
|
322
|
+
const headers = this.buildRetryHeaders(msg, newRetryCount, errorMessage);
|
|
323
|
+
const tempRetryQueue = await this.createTempRetryQueue(delay, msg.fields.routingKey);
|
|
324
|
+
this.channel?.publish('', tempRetryQueue, msg.content, {
|
|
325
|
+
...msg.properties,
|
|
326
|
+
headers,
|
|
327
|
+
persistent: true,
|
|
328
|
+
});
|
|
329
|
+
this.channel?.ack(msg);
|
|
330
|
+
}
|
|
331
|
+
catch (retryError) {
|
|
332
|
+
this.logger.error({ err: retryError, queue: this.queue }, 'Failed to schedule retry, sending to DLQ');
|
|
333
|
+
this.channel?.nack(msg, false, false);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Calculate retry delay with exponential backoff
|
|
338
|
+
*/
|
|
339
|
+
calculateRetryDelay(retryCount) {
|
|
340
|
+
const delay = Math.min(this.initialRetryDelay * Math.pow(2, retryCount - 1), this.maxRetryDelay);
|
|
341
|
+
// Add jitter (0-25%)
|
|
342
|
+
const jitter = delay * Math.random() * 0.25;
|
|
343
|
+
return Math.floor(delay + jitter);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Get retry count from message headers
|
|
347
|
+
*/
|
|
348
|
+
getRetryCount(msg) {
|
|
349
|
+
const headers = msg.properties.headers;
|
|
350
|
+
const retryCount = getHeaderValue(headers, HEADER.RETRY_COUNT);
|
|
351
|
+
return typeof retryCount === 'number' ? retryCount : 0;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Stop consuming messages
|
|
355
|
+
*/
|
|
356
|
+
async stop() {
|
|
357
|
+
if (!this.isConsuming || !this.channel || !this.consumerTag)
|
|
358
|
+
return;
|
|
359
|
+
try {
|
|
360
|
+
await this.channel.cancel(this.consumerTag);
|
|
361
|
+
this.isConsuming = false;
|
|
362
|
+
this.consumerTag = null;
|
|
363
|
+
this.logger.info({ queue: this.queue }, 'Consumer stopped');
|
|
364
|
+
}
|
|
365
|
+
catch (error) {
|
|
366
|
+
this.logger.error({ err: error, queue: this.queue }, 'Error stopping consumer');
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Close the consumer and release resources
|
|
371
|
+
*/
|
|
372
|
+
async close() {
|
|
373
|
+
await this.stop();
|
|
374
|
+
if (this.channel) {
|
|
375
|
+
try {
|
|
376
|
+
await this.channel.close();
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
this.logger.debug({ err: error, queue: this.queue }, 'Error closing channel');
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
this.channel = null;
|
|
383
|
+
this.isInitialized = false;
|
|
384
|
+
this.logger.info({ queue: this.queue }, 'Consumer closed');
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Get consumer stats
|
|
388
|
+
*/
|
|
389
|
+
getStats() {
|
|
390
|
+
return {
|
|
391
|
+
queue: this.queue,
|
|
392
|
+
isConsuming: this.isConsuming,
|
|
393
|
+
isInitialized: this.isInitialized,
|
|
394
|
+
circuitBreakerState: this.circuitBreaker?.getState(),
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
//# sourceMappingURL=BaseConsumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseConsumer.js","sourceRoot":"","sources":["../../src/consumer/BaseConsumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/consumer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/consumer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Service for tracking connection health
|
|
3
|
+
* Provides global status monitoring for all AMQP connections
|
|
4
|
+
*/
|
|
5
|
+
import { ConnectionStatus } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* HealthService - Singleton for tracking queue connection health
|
|
8
|
+
*/
|
|
9
|
+
declare class HealthServiceClass {
|
|
10
|
+
private connectionStatuses;
|
|
11
|
+
/**
|
|
12
|
+
* Register or update a connection's status
|
|
13
|
+
*/
|
|
14
|
+
registerStatus(connectionName: string, status: ConnectionStatus): void;
|
|
15
|
+
/**
|
|
16
|
+
* Get status of a specific connection
|
|
17
|
+
*/
|
|
18
|
+
getStatus(connectionName: string): ConnectionStatus | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Get all connection statuses
|
|
21
|
+
*/
|
|
22
|
+
getAllStatuses(): Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Check if any connections are dead
|
|
25
|
+
*/
|
|
26
|
+
hasDeadConnections(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check if all connections are healthy
|
|
29
|
+
*/
|
|
30
|
+
isHealthy(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get overall status for health endpoint
|
|
33
|
+
*/
|
|
34
|
+
getOverallStatus(): 'healthy' | 'degraded' | 'dead' | 'not_configured';
|
|
35
|
+
/**
|
|
36
|
+
* Unregister a connection
|
|
37
|
+
*/
|
|
38
|
+
unregisterConnection(connectionName: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Clear all connections (useful for testing)
|
|
41
|
+
*/
|
|
42
|
+
clear(): void;
|
|
43
|
+
}
|
|
44
|
+
export declare const HealthService: HealthServiceClass;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=HealthService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HealthService.d.ts","sourceRoot":"","sources":["../../src/health/HealthService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,cAAM,kBAAkB;IACtB,OAAO,CAAC,kBAAkB,CAAuC;IAEjE;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAItE;;OAEG;IACH,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/D;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIxC;;OAEG;IACH,kBAAkB,IAAI,OAAO;IAS7B;;OAEG;IACH,SAAS,IAAI,OAAO;IAapB;;OAEG;IACH,gBAAgB,IAAI,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,gBAAgB;IAkBtE;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIlD;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,aAAa,oBAA2B,CAAC"}
|