パブリッシュ/サブスクライブの実装に問題があります。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 を削除して、可能な限り高速にすることを目的としているため、将来の問題が発生しないようにしました。