@platform-x/hep-message-broker-client 1.1.21 → 1.1.23
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.
|
@@ -367,7 +367,7 @@ class MessageBroker {
|
|
|
367
367
|
* @param request - The request object containing the queue name and the message payload
|
|
368
368
|
* @returns true if the message was published successfully, false otherwise
|
|
369
369
|
*/
|
|
370
|
-
publishMessage(request) {
|
|
370
|
+
publishMessage(classInstance, publishErrorHandler, publishRetryHandler, request) {
|
|
371
371
|
return __awaiter(this, void 0, void 0, function* () {
|
|
372
372
|
var _a, _b;
|
|
373
373
|
logger_1.Logger.info('Reached to publishMessage', 'publishMessage');
|
|
@@ -375,7 +375,7 @@ class MessageBroker {
|
|
|
375
375
|
const retryDelayConfig = ((_a = message === null || message === void 0 ? void 0 : message.message) === null || _a === void 0 ? void 0 : _a.feed_type) === constants_1.RABBITMQ_FEED_TYPE.OVR ? RABBITMQ.OVR_TTL : RABBITMQ.ETX_TTL;
|
|
376
376
|
const retryDelay = retryDelayConfig.split('|').map(Number);
|
|
377
377
|
let attempt = 0;
|
|
378
|
-
while (attempt
|
|
378
|
+
while (attempt <= maxRetries) {
|
|
379
379
|
try {
|
|
380
380
|
yield this.checkConnectionAndChannel();
|
|
381
381
|
const messageBuffer = Buffer.from(JSON.stringify(message));
|
|
@@ -392,15 +392,29 @@ class MessageBroker {
|
|
|
392
392
|
catch (error) {
|
|
393
393
|
attempt++;
|
|
394
394
|
logger_1.Logger.error(`Attempt ${attempt} of ${maxRetries} failed in ${retryDelay[attempt - 1] / 1000}s...: ${error.message}`, 'publishMessage');
|
|
395
|
-
if (attempt
|
|
395
|
+
if (attempt > maxRetries) {
|
|
396
396
|
logger_1.Logger.error('Max retries reached. Sending message to Dead Letter Queue...', 'publishMessage');
|
|
397
397
|
yield this.sendToDeadLetterQueue({ message, attempt });
|
|
398
|
+
// Dead Letter Queue
|
|
399
|
+
if (typeof classInstance[publishErrorHandler] === 'function') {
|
|
400
|
+
classInstance[publishErrorHandler]({ message, retries: attempt });
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
logger_1.Logger.error(`Method ${publishErrorHandler} not found on classInstance`, 'publishMessage');
|
|
404
|
+
}
|
|
398
405
|
logger_1.Logger.error(`Failed to publish message to queue ${queueName} after ${maxRetries} attempts`, 'publishMessage');
|
|
399
406
|
return false;
|
|
400
407
|
}
|
|
401
408
|
// Exponential backoff using TTL array
|
|
402
409
|
const delay = (_b = retryDelay[attempt - 1]) !== null && _b !== void 0 ? _b : retryDelay[retryDelay.length - 1];
|
|
403
410
|
logger_1.Logger.info(`Retrying in ${delay / 1000}s...`, 'publishMessage');
|
|
411
|
+
// Retry Queue 3 times
|
|
412
|
+
if (typeof classInstance[publishRetryHandler] === 'function') {
|
|
413
|
+
classInstance[publishRetryHandler]({ message, retries: attempt });
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
logger_1.Logger.error(`Method ${publishRetryHandler} not found on classInstance`, 'publishMessage');
|
|
417
|
+
}
|
|
404
418
|
yield new Promise(res => setTimeout(res, delay));
|
|
405
419
|
}
|
|
406
420
|
}
|
|
@@ -440,14 +454,14 @@ class MessageBroker {
|
|
|
440
454
|
* @param consumerHandler - Method name on classInstance to process each message
|
|
441
455
|
* @param consumerErrorHandler - Method name on classInstance called when all retries fail
|
|
442
456
|
*/
|
|
443
|
-
initializeConsumers(classInstance, consumerHandler, consumerErrorHandler) {
|
|
457
|
+
initializeConsumers(classInstance, consumerHandler, consumerErrorHandler, consumerRetryHandler) {
|
|
444
458
|
return __awaiter(this, void 0, void 0, function* () {
|
|
445
459
|
try {
|
|
446
460
|
logger_1.Logger.info('Reached in initialize consumers', 'initializeConsumers');
|
|
447
461
|
const consumeQueues = configData === null || configData === void 0 ? void 0 : configData.etg_consume_queues;
|
|
448
462
|
for (const queueName in consumeQueues) {
|
|
449
463
|
if (Object.prototype.hasOwnProperty.call(consumeQueues, queueName)) {
|
|
450
|
-
yield this.consumeMessage(queueName, classInstance, consumerHandler, consumerErrorHandler);
|
|
464
|
+
yield this.consumeMessage(queueName, classInstance, consumerHandler, consumerErrorHandler, consumerRetryHandler);
|
|
451
465
|
}
|
|
452
466
|
}
|
|
453
467
|
}
|
|
@@ -468,7 +482,7 @@ class MessageBroker {
|
|
|
468
482
|
* @param consumerHandler - Method name invoked to process each message
|
|
469
483
|
* @param consumerErrorHandler - Method name invoked when all retries fail
|
|
470
484
|
*/
|
|
471
|
-
consumeMessage(queueName, classInstance, consumerHandler, consumerErrorHandler) {
|
|
485
|
+
consumeMessage(queueName, classInstance, consumerHandler, consumerErrorHandler, consumerRetryHandler) {
|
|
472
486
|
return __awaiter(this, void 0, void 0, function* () {
|
|
473
487
|
logger_1.Logger.info(`Reached: Consuming messages from queue ${queueName}`, 'consumeMessage');
|
|
474
488
|
yield this.checkConnectionAndChannel();
|
|
@@ -507,7 +521,7 @@ class MessageBroker {
|
|
|
507
521
|
this.channel.ack(message);
|
|
508
522
|
}
|
|
509
523
|
else {
|
|
510
|
-
if (retryCount
|
|
524
|
+
if (retryCount > maxRetries) {
|
|
511
525
|
logger_1.Logger.error('Max retries reached. Sending message to Dead Letter Queue.', 'consumeMessage');
|
|
512
526
|
yield this.sendToDeadLetterQueue({ message: data, attempt: retryCount });
|
|
513
527
|
if (typeof classInstance[consumerErrorHandler] === 'function') {
|
|
@@ -527,6 +541,13 @@ class MessageBroker {
|
|
|
527
541
|
const delay = Number(retryDelay[delayIndex]);
|
|
528
542
|
logger_1.Logger.info(`Retrying in ${delay / 1000} seconds... (attempt ${nextAttempt} of ${maxRetries} ${data.feed_type})`, 'consumeMessage');
|
|
529
543
|
yield this.sendMessageToRetryQueue({ attempt: nextAttempt, data, retryDelayMs: delay, queueName });
|
|
544
|
+
// retry call
|
|
545
|
+
if (typeof classInstance[consumerRetryHandler] === 'function') {
|
|
546
|
+
yield classInstance[consumerRetryHandler](data);
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
logger_1.Logger.error(`Method ${consumerRetryHandler} not found on classInstance`, 'consumeMessage');
|
|
550
|
+
}
|
|
530
551
|
this.channel.ack(message);
|
|
531
552
|
}
|
|
532
553
|
}
|
|
@@ -264,7 +264,7 @@ class MessageBrokerClient {
|
|
|
264
264
|
* Funvction for initialize consumer queue
|
|
265
265
|
* @param consumerQueues
|
|
266
266
|
*/
|
|
267
|
-
initializeConsumers(classInstance, consumerHandler, consumerErrorHandler
|
|
267
|
+
initializeConsumers(classInstance, consumerHandler, consumerErrorHandler) {
|
|
268
268
|
return __awaiter(this, void 0, void 0, function* () {
|
|
269
269
|
try {
|
|
270
270
|
logger_1.Logger.info('Reached in initialize consumer', `initializeConsumers`);
|
|
@@ -273,7 +273,7 @@ class MessageBrokerClient {
|
|
|
273
273
|
for (let queueName in configData === null || configData === void 0 ? void 0 : configData.consume_queues) {
|
|
274
274
|
if (Object.prototype.hasOwnProperty.call(consume_queues, queueName)) {
|
|
275
275
|
// Call function Consume messages with retry
|
|
276
|
-
yield this.consumeMessage(queueName, classInstance, consumerHandler, consumerErrorHandler
|
|
276
|
+
yield this.consumeMessage(queueName, classInstance, consumerHandler, consumerErrorHandler);
|
|
277
277
|
}
|
|
278
278
|
}
|
|
279
279
|
}
|
|
@@ -328,7 +328,7 @@ class MessageBrokerClient {
|
|
|
328
328
|
* Function to consume message with retry
|
|
329
329
|
* @param queueName
|
|
330
330
|
*/
|
|
331
|
-
consumeMessage(queueName, classInstance, consumerHandler, consumerErrorHandler
|
|
331
|
+
consumeMessage(queueName, classInstance, consumerHandler, consumerErrorHandler) {
|
|
332
332
|
return __awaiter(this, void 0, void 0, function* () {
|
|
333
333
|
logger_1.Logger.info("Reached: Consuming messages from the queue", 'consumeMessage');
|
|
334
334
|
let attempt = 0;
|
|
@@ -380,13 +380,6 @@ class MessageBrokerClient {
|
|
|
380
380
|
let count = retry_delay.length === attempt ? retry_delay[retry_delay.length - 1] : retry_delay[attempt - 1];
|
|
381
381
|
retryDelay = Number(count);
|
|
382
382
|
yield this.sendMessageToRetryQueue(attempt, data, retryDelay, queueName);
|
|
383
|
-
// retry method
|
|
384
|
-
if (typeof classInstance[consumerRetryHandler] === 'function') {
|
|
385
|
-
yield classInstance[consumerRetryHandler](data); // Dynamically call the method
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
logger_1.Logger.info(`Method ${consumerRetryHandler} not found in classInstance.`, 'consumerMessage');
|
|
389
|
-
}
|
|
390
383
|
logger_1.Logger.info(`Retrying in ${retryDelay / 1000} seconds...`, 'consumeMessage');
|
|
391
384
|
yield new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
392
385
|
}
|