Существует два способа регистрации повторных попыток 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, являются ли оба способа одной и той же вызывающей последовательностью?