1

ディストリビューターと 2 つのワーカーがあり、ディストリビューターのストレージ キュー メッセージは増加し続け、各メッセージのサイズは 2 kb です。

ここで Udi の返信を確認しました http://tech.dir.groups.yahoo.com/group/nservicebus/message/10698 メッセージは、ワーカー ノードにメッセージをディスパッチするときに、ディストリビューターのストレージ キューからクリアされます。そうは言っても、通常、ワーカー ノードはすぐに Ready メッセージを送信するため、ストレージ キューが再びいっぱいになります。

「ストレージ キューが再びいっぱいになる原因」については明確ではありません。声明。

ディストリビューターのストレージ キュー内の最大メッセージ数はワーカー数と同じであるべきだと思っていましたが、そうではありません。

ディストリビューターのストレージ キューのクリーンアップ動作を制御するために不足している可能性がある構成はありますか?

4

2 に答える 2

1

NSB 3.3.2 の時点で、既知の問題https://github.com/NServiceBus/NServiceBus/issues/806があり、ディストリビューター シナリオのワーカーで SendLocal を使用しています。これにより、ワーカーは、ローカルに送信されたメッセージを処理するたびに「ready for a new message」を送信するようになります。これにより、ディストリビューターのストレージ キューが、すべてのワーカーのすべてのワーカー スレッドの合計の予想される最大値を超えて大きくなります。これは、大量のメッセージをローカルに送信し、ストレージ キュー内のエントリ数が非常に大きくなった場合に問題になる可能性があります。

回避策:

  1. SendLocal から Send に切り替える
  2. ワーカーを再起動します (これによりストレージがリセットされますが、ワーカーの SendLocal ごとに再度構築されます)

SLR(Second Level Retries) 機能 ( https://github.com/NServiceBus/NServiceBus/issues/571 )にも同様の問題がありましたが、3.2.7 で修正されました。

于 2012-12-11T11:43:11.437 に答える
0

ワーカーが再起動すると、キューはクリアされます。2.x で実行していると思いますが、キュー内のメッセージ数がワーカー数の 2 倍であることを思い出しました。正確な理由は覚えていませんが、実際には何にも影響しません。

3.x では、ワーカーごとに 1 つのメッセージがあり、ワーカーが再起動されるとメッセージがクリアされることを検証しました。再起動が発生すると、ワーカーはすぐに調整して可用性を報告するため、キューは再起動直後にメッセージを保持します。

于 2012-11-20T14:16:40.190 に答える