Пример #1
0
        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));
            }
        }
Пример #2
0
        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)));
        }