Beispiel #1
0
        protected override async Task <bool> ShouldRetryAsync(EventExecutionErrorContext context)
        {
            var messageId = context.GetProperty <Guid>(nameof(LocalEventMessage.MessageId));

            context.SetProperty(RetryAttemptKey, RetryTracking.GetOrDefault(messageId));

            if (await base.ShouldRetryAsync(context))
            {
                return(true);
            }

            RetryTracking.Remove(messageId);
            return(false);
        }
Beispiel #2
0
        protected override async Task RetryAsync(EventExecutionErrorContext context)
        {
            if (Options.RetryStrategyOptions.IntervalMillisecond > 0)
            {
                await Task.Delay(Options.RetryStrategyOptions.IntervalMillisecond);
            }

            var messageId = context.GetProperty <Guid>(nameof(LocalEventMessage.MessageId));

            context.TryGetRetryAttempt(out var retryAttempt);
            RetryTracking[messageId] = ++retryAttempt;

            await context.EventBus.As <LocalEventBus>().PublishAsync(new LocalEventMessage(messageId, context.EventData, context.EventType));

            RetryTracking.Remove(messageId);
        }
Beispiel #3
0
        protected override async Task RetryAsync(EventExecutionErrorContext context)
        {
            if (Options.RetryStrategyOptions.IntervalMillisecond > 0)
            {
                await Task.Delay(Options.RetryStrategyOptions.IntervalMillisecond);
            }

            context.TryGetRetryAttempt(out var retryAttempt);

            await context.EventBus.As <RabbitEventBus>().PublishAsync(
                context.EventType,
                context.EventData,
                context.GetProperty(HeadersKey).As <MessageProperties>(),
                new Dictionary <string, object>
            {
                { RetryAttemptKey, ++retryAttempt },
                { "exceptions", context.Exceptions.Select(x => x.ToString()).ToList() }
            });
        }