private RabbitMqSubscriber <TMessage> BuildSubscriber(RabbitMqSubscriptionSettings subscriptionSettings, Func <TMessage, Task> basicHandler, Func <TMessage, Task> throttlingHandler) { var result = new RabbitMqSubscriber <TMessage>( LoggerFactory.CreateLogger <RabbitMqSubscriber <TMessage> >(), subscriptionSettings) .SetMessageDeserializer(MessageDeserializer) .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy(RoutingKey ?? "")) .SetReadHeadersAction(_correlationManager.FetchCorrelationIfExists) .Subscribe(msg => Settings.ThrottlingRateThreshold.HasValue ? throttlingHandler(msg) : basicHandler(msg)); foreach (var middleware in GetMiddlewares <TMessage>(subscriptionSettings)) { result = result.UseMiddleware(middleware); } return(result); }