2回のタイムアウトを使用するサガでいくつかのストレステストを行っています。テスト中に約21Kのサガが作成されます。つまり、42Kのタイムアウトが発生することになりますが、MSMQの記憶域の上限に達したためクラッシュするまで、サガのタイムアウトディスパッチャのキューには何百ものメッセージが流入しています。NServiceBusタイムアウトディスパッチャキューにストレステスト中にメッセージがいっぱいになっています
RavenDBからSQL Serverに永続化メカニズムを切り替えたので、この現象が見られました。
誰かが間違っている可能性があるアイデアはありますか?
交通:MSMQ
永続性:NHibernateの使用 パッケージ:
NHibernate version 4.0.4.4000
NServiceBus version 5.2.14
NServiceBus.Host version 6.0.0
NServiceBus.Log4Net version 1.0.0
NServiceBus.NHibernate version 6.2.7
テストのセットアップ:
*エンドポイント1は2
*エンドポイント2つのホスト開始されサガをエンドポイントする22000件のメッセージを送信していますそのメッセージで
*各サガはイベントを発行した後、4分で1分、10分で1分の2つのタイムアウトを要求します。
観測された動作:
*エンドポイント1は22Kメッセージを1分以内に送信します。
*エンドポイント2(サガ)は、1秒あたり5~10メッセージを処理します。
* 4分後、最初のタイムアウトが発生しますが、エンドポイント2はキューからメッセージを処理しているため、まだ新しいサガインスタンスが作成されています。
*その瞬間から、sagaエンドポイントのタイムアウトディスパッチャキューはメッセージでいっぱいになっています。
* 10分後、timeoutsdispatcherキューにはすでに170,000を超えるメッセージが含まれており、まだいっぱいです。
*これは、MSMQストレージの制限に達するか、入力キューからのすべてのメッセージが処理されるため、エンドポイント2がクラッシュするまで続きます。後者が最初に発生すると、タイムアウトディスパッチャキューのメッセージ数は最終的に0に達するまで減少し始めます。
はい私は、RavenDbで最初に行ったのと同じマシン、すなわちSSD内蔵のローカルノートパソコンでストレステストを行っています。メッセージ処理自体には何も問題はありません。 Sagaエンドポイントは正常に動作しており、毎秒5〜10メッセージを処理しています。私は、私の佐賀のtimeoutspispatcherのキューにメッセージがあふれているのを見ています。瞬間、私の作成した佐賀の火の2つのタイムアウトのうちの最初のものです。 –
私はテストのセットアップと観察の説明を追加しました。 –
自分の答えを更新しました。おそらくそれが役に立ちます。 –