2012-02-22 7 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> 

私はまた、これにエンドポイントの設定を変更した:それはアップしたときに発生

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

エラー/問題の原因が1つ見つかりました。 app.config(ForwardReceivedMessagesTo)にメッセージ転送キューが指定されていても、ホストマシン上にキューが存在しない場合は、同じエラーが発生します。

app.configを

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

問題は、テスト環境で不足しているというキュー私が実行しているんだ6のうちの一つだけのプロセスとして引き起こされました。 5つは 'auditqueue'に設定され、1つは 'auditqueue_test2'であり、悲しいことに正しい名前ではなく、このインスタンスでキューを自動作成したり、DEBUGステートメントでこれが問題。

私は 'auditqueue_test2'という新しいトランザクションキューを作成しましたが、現在実行中です。私は再びロギングを追加して、それが機能するかどうかを確認します。

1

これはRC4のバグによるものです。
RC5で試してください。問題が解決するかどうか確認してください。

+0

私はバージョン2.6を使用していることを忘れていました。 NSB 3.0へのアップグレードは難しいでしょうか? – Fellmeister

+0

また、私の開発マシンのデバッグではロギングがうまく動作しますが、NServiceBus.Host.Exeでサービスとして実行すると、DLLのリリースバージョンでテストマシンでこの問題が発生します – Fellmeister

+0

非常に簡単です変更) –

関連する問題