Esempio n. 1
0
        private async Task <TResponse> Handle(IHorseRequestHandler <TRequest, TResponse> handler, TRequest request, HorseMessage message, HorseClient client)
        {
            if (Retry == null)
            {
                return(await handler.Handle(request, message, client));
            }

            int count = Retry.Count == 0 ? 100 : Retry.Count;

            for (int i = 0; i < count; i++)
            {
                try
                {
                    return(await handler.Handle(request, message, client));
                }
                catch (Exception e)
                {
                    Type type = e.GetType();
                    if (Retry.IgnoreExceptions != null && Retry.IgnoreExceptions.Length > 0)
                    {
                        if (Retry.IgnoreExceptions.Any(x => x.IsAssignableFrom(type)))
                        {
                            throw;
                        }
                    }

                    if (Retry.DelayBetweenRetries > 0)
                    {
                        await Task.Delay(Retry.DelayBetweenRetries);
                    }
                }
            }

            throw new OperationCanceledException("Reached to maximum retry count and execution could not be completed");
        }
Esempio n. 2
0
        /// <summary>
        /// Subscribes to handle requests
        /// </summary>
        public void OnRequest <TRequest, TResponse>(ushort contentType, IHorseRequestHandler <TRequest, TResponse> handler)
        {
            ReadSubscription subscription = new ReadSubscription
            {
                Source              = ReadSource.Request,
                Queue               = null,
                ContentType         = contentType,
                MessageType         = typeof(TRequest),
                Action              = null,
                HmqMessageParameter = true,
                ConsumerExecuter    = new RequestHandlerExecuter <TRequest, TResponse>(handler.GetType(), handler, null)
            };

            lock (_subscriptions)
                _subscriptions.Add(subscription);
        }
Esempio n. 3
0
 public RequestHandlerExecuter(Type handlerType, IHorseRequestHandler <TRequest, TResponse> handler, Func <IConsumerFactory> handlerFactoryCreator)
 {
     _handlerType           = handlerType;
     _handler               = handler;
     _handlerFactoryCreator = handlerFactoryCreator;
 }