2012-02-22 2 views
2

После добавления регистрации в журнал (используя log4net) в мое приложение, он больше не обрабатывает подписные сообщения и помещает их в очередь ошибок. Ниже, некоторые имена пространства имен были изменены для защиты невинных.Ошибка при обработке сообщений подписки NServiceBus

app.config

<?xml version="1.0"?> 
<configuration> 
<configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" /> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" /> 
    <section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" /> 
    <section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core" /> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
</configSections> 

<Logging Threshold="INFO" /> 

<log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n"/> 
     </layout> 
    </appender> 
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 
     <layout type="log4net.Layout.PatternLayout"> 
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n"/> 
     </layout> 
    </appender> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n"/> 
     </layout> 
    </appender> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="logfile.txt" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="INFO"/> 
     <appender-ref ref="ConsoleAppender"/> 
     <appender-ref ref="FileAppender"/> 
    </root> 
</log4net> 

<MsmqTransportConfig 
    InputQueue="BankRequestDispatcherInputQueue_DEV2" 
    ErrorQueue="error" 
    NumberOfWorkerThreads="1" 
    MaxRetries="5" 
/> 

<UnicastBusConfig ForwardReceivedMessagesTo="auditqueue"> 
    <MessageEndpointMappings> 
     <add Messages="<assembly>.BankRequestBatchClosed,<assembly>" Endpoint="ScheduledBatchAgentInputQueue_DEV2" /> 
    </MessageEndpointMappings> 
</UnicastBusConfig> 

<MsmqSubscriptionStorageConfig Queue="BRDispatcher_DEV2_subscriptions" /> 

<!-- Neccessary for Fluent/NHibernate/SQLLite dlls --> 
<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 
<appSettings> 
    <add key="TempRequestFileLocation" value="c:\temp\"/> 
    <add key="KeepRequestFiles" value="true"/> 
    <add key="Environment" value="TEST"/> 
</appSettings> 
</configuration> 

Я также изменил Endpoint конфиг к этому:

namespace myNamespace.BRDispatcher 
{ 
    /// <summary> 
    /// Interface tells NServiceBus which roles to setup for this class. 
    /// </summary> 
    public class BRDEndpointConfig : IConfigureThisEndpoint, IWantCustomInitialization 
    { 
     #region Class References -1- 
     /// <summary> 
     /// Reference to Logger object. 
     /// </summary> 
     private static readonly ILog Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     #endregion 
    public void Init() 
    { 
     NServiceBus.SetLoggingLibrary.Log4Net(log4net.Config.XmlConfigurator.Configure); 

     Logger.Info("BankRequestDispatcher - Init()"); 

     NServiceBus.Configure.With() 
      //.Log4Net() 
      .DefaultBuilder() 
      .XmlSerializer() 
      .MsmqSubscriptionStorage() 
      .MsmqTransport() 
      .IsTransactional(true) 
      .PurgeOnStartup(false) 
      .UnicastBus() 
      .ImpersonateSender(false) 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 

     Logger.Info("BankRequestDispatcher - Init() Complete"); 
    } 
} 
} 

Когда он запускает, любая подписка на полученное сообщение получает сбрасывали на ошибку и я вижу это в журнале:

2012-02-22 17:02:48,013 [Worker.8] ERROR NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)] - Message has failed the maximum number of times allowed, ID=94b95c71-896f-4991-b3ba-9d2068a68c63\81504. 

ответ

0

Я нашел одну причину ошибки/проблемы. Если очередь пересылки сообщений указана в app.config (ForwardReceivedMessagesTo), но очередь не существует на главной машине, тогда вы получите ту же ошибку.

app.config

<UnicastBusConfig ForwardReceivedMessagesTo="auditqueue"> 
<MessageEndpointMappings> 
    <add Messages="<assembly>.BankRequestBatchClosed,<assembly>" Endpoint="ScheduledBatchAgentInputQueue_DEV2" /> 
</MessageEndpointMappings> 

Проблема была вызвана как только один процесс из шести у меня работает по имени недостающих очередей в тестовой среде. Пять были настроены на «auditqueue», а один был «auditqueue_test2», который, к сожалению, был правильным именем, за исключением того, что он не существовал, и он не создает автоматическое создание очереди в этом экземпляре и не делает никаких замечаний в операторах DEBUG, что это проблема.

Я создал новую транзакционную очередь под названием «auditqueue_test2», и она теперь запущена. Я собираюсь добавить в журнал снова и посмотреть, работает ли он.

1

Это связано с ошибкой в ​​RC4, пожалуйста, попробуйте с
RC5 и посмотрите, не устраняет проблему.

+0

Я забыл упомянуть, что я использую версию 2.6. Это будет сложное обновление до NSB 3.0? – Fellmeister

+0

Кроме того, протоколирование отлично работает при отладке на моем компьютере-разработчике, но версия выпуска DLL-ов эта проблема возникает на тестовой машине при работе в качестве службы с NServiceBus.Host.Exe – Fellmeister

+0

Должно быть довольно легко (но ожидайте несколько взломов изменения) –

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