Способы регистрации повторного запуска 1 и 2 уровня - PullRequest
0 голосов
/ 03 июня 2019

Существует два способа регистрации повторных попыток 2-го уровня, я хочу знать, в чем разница с точки зрения использования maxDeliveryAttempts и вызова обработчика 1-го уровня, обработчика 2-го уровня и IErrorHandler.

Первый способрегистрация повторного попытки 2-го уровня

Регистрация обоих Handler s.

        activator.Register((bus, mc) => new Handler(mc, bus));

            activator.Register((bus, mc) => new SecondHandler(mc, bus));    

1-й обработчик для типа строки ниже:

   public class Handler:IHandleMessages<string>
    {
        private readonly IMessageContext _messageContext;
        private readonly IBus _bus;

        public Handler(IMessageContext messageContext, IBus bus)
        {
            _messageContext = messageContext;
            _bus = bus;
        }

        public async Task Handle(string message)
        {
            Console.WriteLine("Handle(IFailed<Object> message): {0}", message);
            await _bus.Advanced.TransportMessage.Defer(TimeSpan.FromSeconds(2))
        }
    }

2-й обработчик для типа объекта ниже:

   public class SecondHandler :IHandleMessages<IFailed<object>>
    {
        private readonly IMessageContext _messageContext;
        private readonly IBus _bus;

        public SecondHandler(IMessageContext messageContext, IBus bus)
        {
            _messageContext = messageContext;
            _bus = bus;
        }

        public async Task Handle(IFailed<object> message)
        {
            Console.WriteLine("Handle(IFailed<Object> message): {0}", message);
            await _bus.Advanced.TransportMessage.Defer(TimeSpan.FromSeconds(2))
        }
    }

Второй способ регистрации 2-го уровняretry

Является ли последовательность вызова обоих методов дескриптора ниже той же, что и выше?

Регистр только Handler.

activator.Register((bus, mc) => new Handler(mc, bus));

1-й и 2-й обработчик для строки и типа объекта ниже:

public class Handler:IHandleMessages<string>, IHandleMessages<IFailed<object>>
    {
        private readonly IMessageContext _messageContext;
        private readonly IBus _bus;

        public Handler(IMessageContext messageContext, IBus bus)
        {
            _messageContext = messageContext;
            _bus = bus;
        }

        public async Task Handle(string message)
        {
            Console.WriteLine("Handle(IFailed<Object> message): {0}", message);
            await _bus.Advanced.TransportMessage.Defer(TimeSpan.FromSeconds(2))
        }

  public async Task Handle(IFailed<object> message)
        {
            Console.WriteLine("Handle(IFailed<Object> message): {0}", message);
            await _bus.Advanced.TransportMessage.Defer(TimeSpan.FromSeconds(2))
        }
    }

Учитывая maxDeliveryAttempts и IErrorHandler, являются ли оба способа одной и той же вызывающей последовательностью?

...