注册第一级和第二级重试运行的方式

时间:2019-06-03 10:42:38

标签: rebus rebus-azureservicebus

注册第二级重试有两种方法,我想知道在使用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,这两种方法的调用顺序是否相同?

0 个答案:

没有答案
相关问题