public void MessageConfigured <TMessage>(IConsumePipeConfigurator configurator) where TMessage : class { var redeliverySpecification = new DelayedExchangeRedeliveryPipeSpecification <TMessage>(); configurator.AddPipeSpecification(redeliverySpecification); var retrySpecification = new RedeliveryRetryPipeSpecification <TMessage>(); _configure(retrySpecification); configurator.AddPipeSpecification(retrySpecification); }
/// <summary> /// Use the message scheduler to schedule redelivery of messages based on the retry policy. /// </summary> /// <param name="configurator"></param> /// <param name="retryPolicy"></param> public static void UseDelayedRedelivery <T>(this IPipeConfigurator <ConsumeContext <T> > configurator, IRetryPolicy retryPolicy) where T : class { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } var redeliverySpecification = new DelayedExchangeRedeliveryPipeSpecification <T>(); configurator.AddPipeSpecification(redeliverySpecification); var retrySpecification = new RedeliveryRetryPipeSpecification <T>(retryPolicy); configurator.AddPipeSpecification(retrySpecification); }
/// <summary> /// Use the message scheduler to schedule redelivery of a specific message type based upon the retry policy. /// </summary> /// <param name="configurator"></param> /// <param name="configure"></param> public static void UseScheduledRedelivery <T>(this IPipeConfigurator <ConsumeContext <T> > configurator, Action <IRetryConfigurator> configure) where T : class { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } var redeliverySpecification = new ScheduleMessageRedeliveryPipeSpecification <T>(); configurator.AddPipeSpecification(redeliverySpecification); var retrySpecification = new RedeliveryRetryPipeSpecification <T>(); configure?.Invoke(retrySpecification); configurator.AddPipeSpecification(retrySpecification); }
/// <summary> /// Use the message scheduler to schedule redelivery of a specific message type based upon the retry policy. /// </summary> /// <param name="configurator"></param> /// <param name="retryPolicy"></param> public static void UseScheduledRedelivery <T>(this IPipeConfigurator <ConsumeContext <T> > configurator, IRetryPolicy retryPolicy) where T : class { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } var redeliverySpecification = new ScheduleMessageRedeliveryPipeSpecification <T>(); configurator.AddPipeSpecification(redeliverySpecification); var retrySpecification = new RedeliveryRetryPipeSpecification <T>(); retrySpecification.SetRetryPolicy(exceptionFilter => new ConsumeContextRetryPolicy <ConsumeContext <T>, RetryConsumeContext <T> >(retryPolicy, CancellationToken.None, Factory)); configurator.AddPipeSpecification(retrySpecification); }
void IConsumerConfigurationObserver.ConsumerMessageConfigured <TConsumer, TMessage>(IConsumerMessageConfigurator <TConsumer, TMessage> configurator) { Tuple <Type, Type> key = Tuple.Create(typeof(TConsumer), typeof(TMessage)); if (_messageTypes.Contains(key)) { return; } _messageTypes.Add(key); var redeliverySpecification = new DelayedExchangeRedeliveryPipeSpecification <TMessage>(); _configurator.AddPipeSpecification(redeliverySpecification); var retrySpecification = new RedeliveryRetryPipeSpecification <TMessage>(); _configure(retrySpecification); _configurator.AddPipeSpecification(retrySpecification); }