public static Func <RecoverabilityConfig, ErrorContext, RecoverabilityAction> AlwaysRetry()
 {
     return(new RetryPolicy(new[]
     {
         RecoverabilityAction.ImmediateRetry()
     }).Invoke);
 }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
 static RecoverabilityAction OnError(RecoverabilityConfig arg1, ErrorContext arg2)
 {
     return(RecoverabilityAction.ImmediateRetry());
 }