private async Task TransmitUnacknowledgedMessages(ConsumerConnectedArgs obj) { int timeoutCounter = 0; while (File.Exists(ConsumerLocations.GetConsumerPointerFile(obj.Tenant, obj.Product, obj.Component, obj.Topic, obj.ConsumerName)) != true) { // try every second for 5 seconds if the db is created. timeoutCounter++; Thread.Sleep(1000); if (timeoutCounter == 5) { return; } } string consumerKey = GenerateConsumerKey(obj.Tenant, obj.Product, obj.Component, obj.Topic, obj.ConsumerName); ConsumerPointerContext consumerPointerContext = _consumerIOService.GetConsumerConnector(consumerKey).ConsumerPointerContext; try { consumerPointerContext = _consumerIOService.GetConsumerConnector(consumerKey).ConsumerPointerContext; } catch (Exception) { _logger.LogError($"Couldn't sent unacknoledge messages to consumer '{obj.ConsumerName}' at {consumerKey.Replace("~", "/")}"); ReleaseUnacknoledgedMessageTasks(consumerKey); return; } List <MessageFile> partitionFiles = GetPartitionFiles(obj.Tenant, obj.Product, obj.Component, obj.Topic); bool isNewConsumer = false; try { // check if connection is open CheckPointerDbConnection(consumerPointerContext, consumerKey); var unackedMessages = consumerPointerContext.ConsumerMessages.Where(x => x.IsAcknowledged == false).OrderBy(x => x.SentDate).ToList(); if (unackedMessages.Count == 0) { int totalCount = consumerPointerContext.ConsumerMessages.Count(); if (totalCount == 0) { // Checking if this is a new consumer. if (obj.InitialPosition == InitialPosition.Latest) { return; } unackedMessages = consumerPointerContext.ConsumerMessages.OrderBy(x => x.SentDate).ToList(); isNewConsumer = true; } } await AnalysePartitionFiles(obj, partitionFiles, isNewConsumer, unackedMessages); } catch (Exception ex) { _logger.LogError($"Couldn't sent unacknoledge messages to consumer '{obj.ConsumerName}' at {consumerKey.Replace("~", "/")}; errorDetails = {ex.Message}"); } ReleaseUnacknoledgedMessageTasks(consumerKey); }