注册第二级重试有两种方法,我想知道在使用maxDeliveryAttempts和调用第一级处理程序,第二级处理程序和IErrorHandler方面的区别。
注册第二级重试的第一种方式
同时注册两个Handler
。
activator.Register((bus, mc) => new Handler(mc, bus));
activator.Register((bus, mc) => new SecondHandler(mc, bus));
第一个字符串类型的处理程序如下:
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))
}
}
以下对象类型的第二个处理程序:
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))
}
}
注册第二级重试的第二种方式
以下两个调用方法的顺序是否与上面相同?
仅注册Handler
。
activator.Register((bus, mc) => new Handler(mc, bus));
下面的字符串和对象类型的第一个和第二个处理程序:
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,这两种方法的调用顺序是否相同?