public static Func <RecoverabilityConfig, ErrorContext, RecoverabilityAction> AlwaysRetry() { return(new RetryPolicy(new[] { RecoverabilityAction.ImmediateRetry() }).Invoke); }
private static RecoverabilityAction CustomerExceptionPolicy(RecoverabilityConfig config, ErrorContext context) { var unrecover = context.Exception is UnrecoverableException; var customer = context.Exception is CustomerException; var immediateIdx = context.ImmediateProcessingFailures; var immediateMax = config.Immediate.MaxNumberOfRetries; var delayIdx = context.DelayedDeliveriesPerformed; var delayMax = config.Delayed.MaxNumberOfRetries; if (!unrecover && immediateIdx < immediateMax) { Console.WriteLine($"DelayedRetry {delayIdx}, ImmediateRetry {immediateIdx}"); return(RecoverabilityAction.ImmediateRetry()); } if (!unrecover && immediateIdx == immediateMax && delayIdx < delayMax) { Console.WriteLine($"DelayedRetry {delayIdx}"); return(RecoverabilityAction.DelayedRetry(config.Delayed.TimeIncrease)); } if (customer && delayIdx == delayMax) { Console.WriteLine("Alert customer exception"); } return(RecoverabilityAction.MoveToError(config.Failed.ErrorQueue)); }
static RecoverabilityAction RecoverabilityPolicy(RecoverabilityConfig config, ErrorContext errorContext) { if (errorContext.ImmediateProcessingFailures <= MaxNumberOfImmediateRetries) { return(RecoverabilityAction.ImmediateRetry()); } return(RecoverabilityAction.MoveToError(config.Failed.ErrorQueue)); }
public void ImmediateRetry(FeatureConfigurationContext context) { #region SatelliteRecoverability-ImmediateRetry context.AddSatelliteReceiver( name: "CustomSatellite", transportAddress: "targetQueue", runtimeSettings: PushRuntimeSettings.Default, recoverabilityPolicy: (config, errorContext) => { return(RecoverabilityAction.ImmediateRetry()); }, onMessage: OnMessage); #endregion }
public RecoverabilityAction Retry(RecoverabilityConfig recoverabilityConfig, ErrorContext errorContext) { if (errorContext.Exception is OptimisticConcurrencyException) { var ttl = errorContext.Message.Headers[ ApplicationConfiguration.Instance.GetValue <string>( "ProductService:RetryPolicy:HeaderNames:UpdateStockInProduct")]; if (Convert.ToInt32(ttl) == 0) { return(RecoverabilityAction.MoveToError(recoverabilityConfig.Failed.ErrorQueue)); } //TODO:Kudret--> Beklediğim bir senaryo, bu yüzden immediate olarak retry etsin return(RecoverabilityAction.ImmediateRetry()); } return(DefaultRecoverabilityPolicy.Invoke(recoverabilityConfig, errorContext)); }
public async Task When_notification_turned_off_no_notification_should_be_raised() { var policy = RetryPolicy.Return( actions: new RecoverabilityAction[] { RecoverabilityAction.ImmediateRetry(), RecoverabilityAction.DelayedRetry(TimeSpan.FromSeconds(10)), RecoverabilityAction.MoveToError("errorQueue") }); var executor = CreateExecutor(policy, raiseNotifications: false); var errorContext = CreateErrorContext(); await executor.Invoke(errorContext); //force retry await executor.Invoke(errorContext); //force delayed retry await executor.Invoke(errorContext); //force move to errors Assert.IsEmpty(messageRetriedNotifications); Assert.IsEmpty(messageFaultedNotifications); }
protected override void Setup(FeatureConfigurationContext context) { var settings = context.Settings; var attachmentCleaner = settings.GetAttachmentCleaner(); var attachmentFinder = settings.GetAttachmentFinder(); var smtpBuilder = settings.GetSmtpBuilder(); if (smtpBuilder == null) { smtpBuilder = () => new SmtpClient { EnableSsl = true }; } var serializer = GetDefaultSerializer(settings); var satellite = new MailSatellite(attachmentFinder, attachmentCleaner, smtpBuilder, serializer); var tenSeconds = TimeSpan.FromSeconds(10); context.AddSatelliteReceiver( name: "MailSatelite", transportAddress: "Mail", runtimeSettings: PushRuntimeSettings.Default, recoverabilityPolicy: (config, errorContext) => { if (errorContext.ImmediateProcessingFailures < 2) { return(RecoverabilityAction.ImmediateRetry()); } if (errorContext.DelayedDeliveriesPerformed < 3) { return(RecoverabilityAction.DelayedRetry(tenSeconds)); } return(RecoverabilityAction.MoveToError(config.Failed.ErrorQueue)); }, onMessage: satellite.OnMessageReceived); }
static RecoverabilityAction OnError(RecoverabilityConfig arg1, ErrorContext arg2) { return(RecoverabilityAction.ImmediateRetry()); }