bool TerminateIfForwardingQueueNotWritable() { try { //Send a message to test the forwarding queue var testMessage = new TransportMessage(Guid.Empty.ToString("N"), new Dictionary <string, string>()); Forwarder.Send(testMessage, Settings.ErrorLogQueue); return(false); } catch (Exception messageForwardingException) { //This call to RaiseCriticalError has to be on a seperate thread otherwise it deadlocks and doesn't stop correctly. ThreadPool.QueueUserWorkItem(state => Configure.Instance.RaiseCriticalError("Error Import cannot start", messageForwardingException)); return(true); } }
public void Handle(PerformRetry message) { var failedMessage = Session.Load <FailedMessage>(new Guid(message.FailedMessageId)); if (failedMessage == null) { throw new ArgumentException("Can't find the failed message with id: " + message.FailedMessageId); } if (failedMessage.Status != FailedMessageStatus.Unresolved) { // We only retry messages that are unresolved return; } var attempt = failedMessage.ProcessingAttempts.Last(); var originalHeaders = attempt.Headers; var headersToRetryWith = originalHeaders.Where(kv => !KeysToRemoveWhenRetryingAMessage.Contains(kv.Key)) .ToDictionary(kv => kv.Key, kv => kv.Value); headersToRetryWith["ServiceControl.RetryId"] = message.RetryId.ToString(); using (var stream = BodyStorage.Fetch(attempt.MessageId)) { var transportMessage = new TransportMessage(failedMessage.Id, headersToRetryWith) { Body = ReadFully(stream), CorrelationId = attempt.CorrelationId, Recoverable = attempt.Recoverable, MessageIntent = attempt.MessageIntent, }; if (!String.IsNullOrWhiteSpace(attempt.ReplyToAddress)) { transportMessage.ReplyToAddress = Address.Parse(attempt.ReplyToAddress); } failedMessage.Status = FailedMessageStatus.RetryIssued; Forwarder.Send(transportMessage, message.TargetEndpointAddress); } Bus.Publish <MessageSubmittedForRetry>(m => m.FailedMessageId = message.FailedMessageId); }
void InnerHandle(TransportMessage message) { var errorMessageReceived = new ImportFailedMessage(message); var logicalMessage = LogicalMessageFactory.Create(typeof(ImportFailedMessage), errorMessageReceived); using (var childBuilder = Builder.CreateChildBuilder()) { PipelineExecutor.CurrentContext.Set(childBuilder); foreach (var enricher in childBuilder.BuildAll <IEnrichImportedMessages>()) { enricher.Enrich(errorMessageReceived); } PipelineExecutor.InvokeLogicalMessagePipeline(logicalMessage); } Forwarder.Send(message, Settings.ErrorLogQueue); }
void InnerHandle(TransportMessage message) { var receivedMessage = new ImportSuccessfullyProcessedMessage(message); using (var childBuilder = Builder.CreateChildBuilder()) { PipelineExecutor.CurrentContext.Set(childBuilder); foreach (var enricher in childBuilder.BuildAll <IEnrichImportedMessages>()) { enricher.Enrich(receivedMessage); } var logicalMessage = LogicalMessageFactory.Create(typeof(ImportSuccessfullyProcessedMessage), receivedMessage); PipelineExecutor.InvokeLogicalMessagePipeline(logicalMessage); } if (Settings.ForwardAuditMessages == true) { Forwarder.Send(message, Settings.AuditLogQueue); } }