public static IProcessMessageResult ProcessMsg( object msg, DomainMessageProcessingContext messageContext, Func <Type, Action <DomainMessageProcessingContext, object> > domainMessageProcessorLookup) { var msgType = msg.GetType(); var msgHandler = domainMessageProcessorLookup(msgType); try { msgHandler(messageContext, msg); return(new ProcessMessageSuccess()); } catch (Exception e) { if (messageContext.Retries.DoneRetries()) { Logger.Debug("Handler failed: Retries all used up. Give up"); return(new HandlerError(e)); } return(ProcessMsg( msg, new DomainMessageProcessingContext( messageContext.Retries.CreateNextRetry(), messageContext.MessageHeader, messageContext.SourceQueue ), domainMessageProcessorLookup)); } }
public static IProcessMessageResult ProcessMessage( DomainMessage message, MessageEndpointName queueName, Func <Type, Action <DomainMessageProcessingContext, object> > processors) { Logger.Trace($"ProcessMessage: {message.Header}"); var context = new DomainMessageProcessingContext( new Retries(HandlerRetryCount), message.Header, queueName ); Either <DeserializeError, object> msg2 = new Either <DeserializeError, object>(message.Message); return(msg2.Match( e => new DeserializationError(e.Exception), msg3 => ProcessMsg(msg3, context, processors))); }