示例#1
0
 /// <summary>
 /// Constructs the step, using the given transport and settings
 /// </summary>
 public SimpleRetryStrategyStep(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings, IErrorTracker errorTracker, IRebusLoggerFactory rebusLoggerFactory)
 {
     _transport = transport;
     _simpleRetryStrategySettings = simpleRetryStrategySettings;
     _errorTracker = errorTracker;
     _log = rebusLoggerFactory.GetCurrentClassLogger();
 }
 /// <summary>
 /// Constructs the step, using the given transport and settings
 /// </summary>
 public SimpleRetryStrategyStep(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings, IErrorTracker errorTracker, IRebusLoggerFactory rebusLoggerFactory)
 {
     _transport = transport;
     _simpleRetryStrategySettings = simpleRetryStrategySettings;
     _errorTracker = errorTracker;
     _log          = rebusLoggerFactory.GetCurrentClassLogger();
 }
示例#3
0
 /// <summary>
 /// Constructs the retry strategy with the given settings, creating an error queue with the configured name if necessary
 /// </summary>
 public SimpleRetryStrategy(SimpleRetryStrategySettings simpleRetryStrategySettings, IRebusLoggerFactory rebusLoggerFactory, IErrorTracker errorTracker, IErrorHandler errorHandler, CancellationToken cancellationToken)
 {
     _simpleRetryStrategySettings = simpleRetryStrategySettings ?? throw new ArgumentNullException(nameof(simpleRetryStrategySettings));
     _rebusLoggerFactory          = rebusLoggerFactory ?? throw new ArgumentNullException(nameof(rebusLoggerFactory));
     _errorTracker      = errorTracker ?? throw new ArgumentNullException(nameof(errorTracker));
     _errorHandler      = errorHandler ?? throw new ArgumentNullException(nameof(errorHandler));
     _cancellationToken = cancellationToken;
 }
示例#4
0
 /// <summary>
 /// Constructs the step, using the given transport and settings
 /// </summary>
 public SimpleRetryStrategyStep(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings)
 {
     _transport = transport;
     _simpleRetryStrategySettings = simpleRetryStrategySettings;
     _cleanupOldTrackedErrorsTask = new AsyncTask("CleanupTrackedErrors", CleanupOldTrackedErrors)
     {
         Interval = TimeSpan.FromMinutes(1)
     };
 }
示例#5
0
        /// <summary>
        /// Constructs the retry strategy with the given settings, creating an error queue with the configured name if necessary
        /// </summary>
        public SimpleRetryStrategy(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings)
        {
            _transport = transport;
            _simpleRetryStrategySettings = simpleRetryStrategySettings;

            var errorQueueAddress = _simpleRetryStrategySettings.ErrorQueueAddress;

            _transport.CreateQueue(errorQueueAddress);
        }
 /// <summary>
 /// Constructs the step, using the given transport and settings
 /// </summary>
 public SimpleRetryStrategyStep(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings)
 {
     _transport = transport;
     _simpleRetryStrategySettings = simpleRetryStrategySettings;
     _cleanupOldTrackedErrorsTask = new AsyncTask(BackgroundTaskName, CleanupOldTrackedErrors)
     {
         Interval = TimeSpan.FromMinutes(1)
     };
 }
示例#7
0
        /// <summary>
        /// Constructs the retry strategy with the given settings, creating an error queue with the configured name if necessary
        /// </summary>
        public SimpleRetryStrategy(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings)
        {
            _transport = transport;
            _simpleRetryStrategySettings = simpleRetryStrategySettings;

            var errorQueueAddress = _simpleRetryStrategySettings.ErrorQueueAddress;
            
            _transport.CreateQueue(errorQueueAddress);
        }
 /// <summary>
 /// Creates the error handler
 /// </summary>
 public PoisonQueueErrorHandler(SimpleRetryStrategySettings simpleRetryStrategySettings, ITransport transport, IRebusLoggerFactory rebusLoggerFactory)
 {
     if (simpleRetryStrategySettings == null) throw new ArgumentNullException(nameof(simpleRetryStrategySettings));
     if (transport == null) throw new ArgumentNullException(nameof(transport));
     if (rebusLoggerFactory == null) throw new ArgumentNullException(nameof(rebusLoggerFactory));
     _simpleRetryStrategySettings = simpleRetryStrategySettings;
     _transport = transport;
     _log = rebusLoggerFactory.GetCurrentClassLogger();
 }
        /// <summary>
        /// Constructs the step, using the given transport and settings
        /// </summary>
        public SimpleRetryStrategyStep(SimpleRetryStrategySettings simpleRetryStrategySettings, IErrorTracker errorTracker, IErrorHandler errorHandler)
        {
            if (simpleRetryStrategySettings == null) throw new ArgumentNullException(nameof(simpleRetryStrategySettings));
            if (errorTracker == null) throw new ArgumentNullException(nameof(errorTracker));
            if (errorHandler == null) throw new ArgumentNullException(nameof(errorHandler));

            _simpleRetryStrategySettings = simpleRetryStrategySettings;
            _errorTracker = errorTracker;
            _errorHandler = errorHandler;
        }
示例#10
0
        /// <summary>
        /// Constructs the retry strategy with the given settings, creating an error queue with the configured name if necessary
        /// </summary>
        public SimpleRetryStrategy(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings, IErrorTracker errorTracker, IRebusLoggerFactory rebusLoggerFactory)
        {
            _transport = transport;
            _simpleRetryStrategySettings = simpleRetryStrategySettings;
            _errorTracker = errorTracker;
            _rebusLoggerFactory = rebusLoggerFactory;

            var errorQueueAddress = _simpleRetryStrategySettings.ErrorQueueAddress;
            
            _transport.CreateQueue(errorQueueAddress);
        }
示例#11
0
        /// <summary>
        /// Constructs the retry strategy with the given settings, creating an error queue with the configured name if necessary
        /// </summary>
        public SimpleRetryStrategy(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings, IErrorTracker errorTracker, IRebusLoggerFactory rebusLoggerFactory)
        {
            _transport = transport;
            _simpleRetryStrategySettings = simpleRetryStrategySettings;
            _errorTracker       = errorTracker;
            _rebusLoggerFactory = rebusLoggerFactory;

            var errorQueueAddress = _simpleRetryStrategySettings.ErrorQueueAddress;

            _transport.CreateQueue(errorQueueAddress);
        }
示例#12
0
        /// <summary>
        /// Constructs the step, using the given transport and settings
        /// </summary>
        public SimpleRetryStrategyStep(SimpleRetryStrategySettings simpleRetryStrategySettings, IErrorTracker errorTracker, IErrorHandler errorHandler)
        {
            if (simpleRetryStrategySettings == null)
            {
                throw new ArgumentNullException(nameof(simpleRetryStrategySettings));
            }
            if (errorTracker == null)
            {
                throw new ArgumentNullException(nameof(errorTracker));
            }
            if (errorHandler == null)
            {
                throw new ArgumentNullException(nameof(errorHandler));
            }

            _simpleRetryStrategySettings = simpleRetryStrategySettings;
            _errorTracker = errorTracker;
            _errorHandler = errorHandler;
        }
示例#13
0
        /// <summary>
        /// Configures the simple retry strategy, using the specified error queue address and number of delivery attempts
        /// </summary>
        /// <param name="optionsConfigurer">(extension method target)</param>
        /// <param name="errorQueueAddress">Specifies the name of the error queue</param>
        /// <param name="maxDeliveryAttempts">Specifies how many delivery attempts should be made before forwarding a failed message to the error queue</param>
        /// <param name="secondLevelRetriesEnabled">Specifies whether second level retries should be enabled - when enabled, the message will be dispatched wrapped in an <see cref="IFailed{TMessage}"/> after the first <paramref name="maxDeliveryAttempts"/> delivery attempts, allowing a different handler to handle the message. Dispatch of the <see cref="IFailed{TMessage}"/> is subject to the same <paramref name="maxDeliveryAttempts"/> delivery attempts</param>
        /// <param name="errorDetailsHeaderMaxLength">Specifies a MAX length of the error details to be enclosed as the <see cref="Headers.ErrorDetails"/> header. As the enclosed error details can sometimes become very long (especially when using many delivery attempts), depending on the transport's capabilities it might sometimes be necessary to truncate the error details</param>
        /// <param name="errorTrackingMaxAgeMinutes">Specifies the max age of in-mem error trackings, for tracked messages that have not had any activity registered on them.</param>
        public static void SimpleRetryStrategy(this OptionsConfigurer optionsConfigurer,
                                               string errorQueueAddress        = SimpleRetryStrategySettings.DefaultErrorQueueName,
                                               int maxDeliveryAttempts         = SimpleRetryStrategySettings.DefaultNumberOfDeliveryAttempts,
                                               bool secondLevelRetriesEnabled  = false,
                                               int errorDetailsHeaderMaxLength = int.MaxValue,
                                               int errorTrackingMaxAgeMinutes  = SimpleRetryStrategySettings.DefaultErrorTrackingMaxAgeMinutes
                                               )
        {
            if (optionsConfigurer == null)
            {
                throw new ArgumentNullException(nameof(optionsConfigurer));
            }

            optionsConfigurer.Register(c =>
            {
                var settings = new SimpleRetryStrategySettings(
                    errorQueueAddress,
                    maxDeliveryAttempts,
                    secondLevelRetriesEnabled,
                    errorDetailsHeaderMaxLength,
                    errorTrackingMaxAgeMinutes
                    );

                return(settings);
            });

            if (secondLevelRetriesEnabled)
            {
                optionsConfigurer.Decorate <IPipeline>(c =>
                {
                    var pipeline     = c.Get <IPipeline>();
                    var errorTracker = c.Get <IErrorTracker>();

                    var incomingStep = new FailedMessageWrapperStep(errorTracker);
                    var outgoingStep = new VerifyCannotSendFailedMessageWrapperStep();

                    return(new PipelineStepInjector(pipeline)
                           .OnReceive(incomingStep, PipelineRelativePosition.After, typeof(DeserializeIncomingMessageStep))
                           .OnSend(outgoingStep, PipelineRelativePosition.Before, typeof(SerializeOutgoingMessageStep)));
                });
            }
        }
示例#14
0
 /// <summary>
 /// Constructs the step, using the given transport and settings
 /// </summary>
 public SimpleRetryStrategyStep(ITransport transport, SimpleRetryStrategySettings simpleRetryStrategySettings, IErrorTracker errorTracker)
 {
     _transport = transport;
     _simpleRetryStrategySettings = simpleRetryStrategySettings;
     _errorTracker = errorTracker;
 }
示例#15
0
 /// <summary>
 /// Constructs the retry strategy with the given settings, creating an error queue with the configured name if necessary
 /// </summary>
 public SimpleRetryStrategy(SimpleRetryStrategySettings simpleRetryStrategySettings, IErrorTracker errorTracker, IErrorHandler errorHandler)
 {
     _simpleRetryStrategySettings = simpleRetryStrategySettings ?? throw new ArgumentNullException(nameof(simpleRetryStrategySettings));
     _errorTracker = errorTracker ?? throw new ArgumentNullException(nameof(errorTracker));
     _errorHandler = errorHandler ?? throw new ArgumentNullException(nameof(errorHandler));
 }