2013-12-17 2 views
0

Я использую MassTransit версии 2.9.2 с MSMQ.Сообщение не отправляется в очередь ошибок

Я работаю над проверкой обработки ошибок и ожидаю, что процесс попытается отправить мое сообщение 5 раз, а затем поместить сообщение в очередь ошибок.

Сообщение повторяется 5 раз, но затем просто исчезает. Может ли кто-нибудь объяснить, почему сообщение не отправляется в очередь ошибок.

Мой потребитель:

public class OrderConsumer : Consumes<SAPOrder>.Context 
{ 
    public ISapServiceRepository SapServiceRepository { get; set; } 

    public void Consume(IConsumeContext<SAPOrder> message) 
    { 
     try 
     { 
      // Send the message to SAP 
      this.SapServiceRepository.SendOrder(message.Message); 

     } 
     catch (Exception ex) 
     { 

      throw; 
     }  
    } 
} 

Я использую AutoFac зарегистрировать автобус услуг и потребителей.

protected override void Load(ContainerBuilder builder) 
    { 
     builder.Register(c => ServiceBusFactory.New(sbc => 
     { 
      // other configuration options 
      sbc.UseMsmq(
       configurator => configurator.VerifyMsmqConfiguration()); 

      sbc.UseXmlSerializer(); 
      sbc.ReceiveFrom("msmq://localhost/orders"); 
      sbc.Subscribe(x => x.LoadFrom(c.Resolve<ILifetimeScope>())); 
      sbc.EnableMessageTracing(); 
      sbc.UseLog4Net(); 
     })).As<IServiceBus>() 
      .SingleInstance(); 

     if (this.registerConsumers) 
     { 
      builder.RegisterAssemblyTypes(this.GetType().Assembly) 
       .Where(t => t.Implements<IConsumer>()) 
       .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies) 
       .AsSelf(); 

      builder.RegisterType<SapServiceRepository>() 
       .As<ISapServiceRepository>() 
       .InstancePerLifetimeScope() 
       .WithProperty("Username", "xxxxxxxxxxxx") 
       .WithProperty("Password", "xxxxxxxxxxxx") 
       .WithProperty("CountryId", "xxxxxxxxxxx") 
       .WithProperty("UseRequestLogging", true) 
       .PropertiesAutowired(
        PropertyWiringOptions.PreserveSetValues | PropertyWiringOptions.AllowCircularDependencies); 
     } 
    } 

Благодаря

ответ

0

Есть ли проблема с разрешениями предотвращения очереди _error не создается? Появляется ли очередь на панели MMC очереди сообщений? Сообщение должно заканчиваться в очереди ошибок после пяти сбоев, как и ожидалось. Существуют единичные тесты, которые также проверяют это. Что-то читает из очереди ошибок, которая может потреблять сообщение?

0

Создана очередь ошибок.

Я не думаю, что из очереди ошибок что-либо читается, так как я отправил исходное сообщение, я создал нового пользователя для Fault. Это называется, как только было предпринято 5 попыток.

В потребителя вине я тогда получать исходное сообщение не удалось, и может затем вперед на очереди ошибок с помощью кода

public class OrderFaultConsumer : Consumes<Fault<SAPOrder>>.Context 
{ 
    public ILog Logger { get; set; } 

    public void Consume(IConsumeContext<Fault<SAPOrder>> message) 
    { 
     // need to send to the error queue 
     var errorQueue = message.Bus.GetEndpoint(message.Endpoint.ErrorTransport.Address.Uri); 
     errorQueue.Send(message.Message.FailedMessage); 
    } 
} 

Сообщение будет видно в очереди ошибок.

Это все работает, но на мой взгляд, это немного взломать!

Просто укажите, что я не использую многоадресную рассылку или услугу подписки. Мой код, который добавляет сообщение в очередь, выполняет передачу, а не публикацию.

Смежные вопросы