private MessageDocument GetOriginalMessageIfExists(long retryId, RetryMessageResult result) { MessageDocument originalMessage; using (var session = documentStore.OpenSessionForDefaultTenant()) { originalMessage = session.Load <MessageDocument>(retryId); } if (originalMessage == null) { result.RetryMessageItems.Add(new RetryMessageItem { IsRetrying = false, RetryId = retryId, RetryQueue = null, AdditionalInfo = "Original message does not exist in message store" }); return(null); } return(originalMessage); }
public RetryMessageResult Retry(RetryMessageModel retryMessageModel) { var result = new RetryMessageResult(); foreach (var retryId in retryMessageModel.RetryIds) { var originalMessage = GetOriginalMessageIfExists(retryId, result); if (originalMessage == null) { continue; } if (originalMessage.AdditionalErrorStatus != AdditionalErrorStatus.Unresolved) { result.RetryMessageItems.Add(new RetryMessageItem { IsRetrying = false, RetryId = retryId, RetryQueue = null, AdditionalInfo = "Message is in an invalid state for retry", AdditionalErrorStatusOfOriginalMessage = originalMessage.AdditionalErrorStatusString, CanRetryOriginalMessage = originalMessage.CanRetry }); } else { var rawMessage = new RawMessage(originalMessage); var destination = determineRetryDestinationService.GetRetryDestination(rawMessage, retryMessageModel.UserSuppliedRetryDestination); createRetryMessagesFromOriginalService.PrepareMessageForRetry(rawMessage); addRetryTrackingHeadersService.AddTrackingHeaders(rawMessage, retryId); IBasicProperties basicProperties = createBasicPropertiesService.Create(rawMessage); var errorMessage = sendMessagesService.Send(rawMessage, destination, originalMessage.ApplicationId, basicProperties); if (errorMessage == null) { using (var session = documentStore.OpenSessionForDefaultTenant()) { originalMessage.AdditionalErrorStatus = AdditionalErrorStatus.RetryPending; session.Store(originalMessage); session.SaveChanges(); } result.RetryMessageItems.Add(new RetryMessageItem { IsRetrying = true, RetryId = retryId, RetryQueue = destination, AdditionalInfo = null, AdditionalErrorStatusOfOriginalMessage = originalMessage.AdditionalErrorStatusString, CanRetryOriginalMessage = originalMessage.CanRetry }); } else { result.RetryMessageItems.Add(new RetryMessageItem { IsRetrying = false, RetryId = retryId, RetryQueue = destination, AdditionalInfo = errorMessage, AdditionalErrorStatusOfOriginalMessage = originalMessage.AdditionalErrorStatusString, CanRetryOriginalMessage = originalMessage.CanRetry }); } } } return(result); }