public static void HandleMessage(TransportMessage message, IBodyStorage bodyStorage, ISendMessages sender) //Public for testing { message.Headers.Remove("ServiceControl.Retry.StagingId"); string attemptMessageId; if (message.Headers.TryGetValue("ServiceControl.Retry.Attempt.MessageId", out attemptMessageId)) { Stream stream; if (bodyStorage.TryFetch(attemptMessageId, out stream)) { using (stream) { message.Body = ReadFully(stream); } } message.Headers.Remove("ServiceControl.Retry.Attempt.MessageId"); } var destination = message.Headers["ServiceControl.TargetEndpointAddress"]; try { string retryTo; if (!message.Headers.TryGetValue("ServiceControl.RetryTo", out retryTo)) { retryTo = destination; message.Headers.Remove("ServiceControl.TargetEndpointAddress"); } sender.Send(message, new SendOptions(retryTo)); } catch (Exception) { message.Headers["ServiceControl.TargetEndpointAddress"] = destination; if (attemptMessageId != null) { message.Headers["ServiceControl.Retry.Attempt.MessageId"] = attemptMessageId; } throw; } }
public static void HandleMessage(TransportMessage message, IBodyStorage bodyStorage, ISendMessages sender) //Public for testing { message.Headers.Remove("ServiceControl.Retry.StagingId"); Log.DebugFormat("{0}: Retrieving message body", message.Id); string attemptMessageId; if (message.Headers.TryGetValue("ServiceControl.Retry.Attempt.MessageId", out attemptMessageId)) { Stream stream; if (bodyStorage.TryFetch(attemptMessageId, out stream)) { using (stream) { message.Body = ReadFully(stream); } } else { Log.WarnFormat("{0}: Message Body not found for attempt Id {1}", message.Id, attemptMessageId); } message.Headers.Remove("ServiceControl.Retry.Attempt.MessageId"); } else { Log.WarnFormat("{0}: Can't find message body. Missing header ServiceControl.Retry.Attempt.MessageId", message.Id); } if (message.Body != null) { Log.DebugFormat("{0}: Body size: {1} bytes", message.Id, message.Body.LongLength); } else { Log.DebugFormat("{0}: Body is NULL", message.Id); } var destination = message.Headers["ServiceControl.TargetEndpointAddress"]; Log.DebugFormat("{0}: Forwarding message to {1}", message.Id, destination); try { string retryTo; if (!message.Headers.TryGetValue("ServiceControl.RetryTo", out retryTo)) { retryTo = destination; message.Headers.Remove("ServiceControl.TargetEndpointAddress"); } else { Log.DebugFormat("{0}: Found ServiceControl.RetryTo header. Rerouting to {1}", message.Id, retryTo); } sender.Send(message, new SendOptions(retryTo)); Log.DebugFormat("{0}: Forwarded message to {1}", message.Id, retryTo); } catch (Exception) { Log.WarnFormat("{0}: Error forwarding message, resetting headers", message.Id); message.Headers["ServiceControl.TargetEndpointAddress"] = destination; if (attemptMessageId != null) { message.Headers["ServiceControl.Retry.Attempt.MessageId"] = attemptMessageId; } throw; } }