1

パブリッシュ/サブスクライブの実装に問題があります。NServiceBus バージョン 2.6 から 4.0.4 にアップグレードしています。ログから理解できる限り、すべて問題ないように見えますが、サブスクライバーによるメッセージの処理が非常に遅いです。NServiceBus.Host.exe を使用します。

古い実装では、スレッドを次のように構成しました。

<MsmqTransportConfig 
   ErrorQueue="error" 
   NumberOfWorkerThreads="40" 
   MaxRetries="5" />

そして、メッセージは素晴らしい速度で通過します。

新しい実装では、構成に必要な変更を加えようとしました:

<TransportConfig
    MaximumConcurrencyLevel="10"
    MaxRetries="5"
    MaximumMessageThroughputPerSecond="500"/>

重要な何かが欠けていますか?

私は有効なライセンスを持っているので、最大スレッドを使用する必要があります。私は RavenDB や SQL を持っていません。実装では MSMQ を使用しています。サブスクライバーの構成コードで Sagas と TimeoutManager を無効にしました。

NServiceBus.SetLoggingLibrary.Log4Net(log4net.Config.XmlConfigurator.Configure);
Configure.Features.Disable<Sagas>();

NServiceBus.Configure.With()
   .DefaultBuilder()
   .UseTransport<Msmq>()
   .DisableTimeoutManager()
   .UnicastBus()
   .LoadMessageHandlers(); 

私は大まかなテストを行いましたが、私の開発環境の違いは、2.6 バージョンが 1 秒あたり約 80 メッセージを処理し、4.0.4 バージョンが 1 秒あたり約 8 メッセージを処理したことです。これは非常に悪いことです。ここで何かがおかしいので、それが何であるかを見つけることができないようです。

編集: 問題はプロジェクト構造から生成されたようです。何らかの理由で、NServiceBus の古いバージョンは、MEF を使用して実際のサブスクライバー アセンブリをロードする汎用サブスクライバーを使用した構造的アプローチを気にしませんでしたが、新しいものはスリープ状態になりました。フォルダー構造を変更したところ、サブスクライバーが意図したとおりに機能するようになりました。したがって、使用していた構成は問題なく機能しますが、設定から MaximumMessageThroughputPerSecond を削除して、可能な限り高速にすることを目的としているため、将来の問題が発生しないようにしました。

4

0 に答える 0