@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 < maxRetries) {
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 >= maxRetries) {
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 >= maxRetries) {
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, consumerRetryHandler) {
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, consumerRetryHandler);
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, consumerRetryHandler) {
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platform-x/hep-message-broker-client",
3
- "version": "1.1.21",
3
+ "version": "1.1.23",
4
4
  "description": "platform-x hep-message-broker service",
5
5
  "main": "./dist/src/index.js",
6
6
  "scripts": {