問題タブ [nservicebus-sagas]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nservicebus - NServiceBus Timeoutsdispatcher キューがストレス テスト中にメッセージであふれている
2 つのタイムアウトを使用するサガでいくつかのストレス テストを行っています。テスト中に、約 21,000 のサガが作成されます。これは 42K のタイムアウトを意味しますが、MSMQ のストレージ制限に達したためにクラッシュするまで、サガの timeoutsdispatcher キューが数十万のメッセージであふれていることに気付きました。
永続化メカニズムを RavenDB から SQL Server に切り替えてから、この動作が見られます。
誰が何が間違っているのか考えていますか?
トランスポート: MSMQ
持続性: NHibernate 使用するパッケージ:
テストのセットアップ:
* エンドポイント 1 は 22000 のメッセージをエンドポイント 2 に送信しています。
* エンドポイント 2 は、そのメッセージによって開始されるサガをホストします。
* 各サガはイベントを発行し、2 つのタイムアウトを要求します。1 つは 4 分、もう 1 つは 10 分です。
観察された動作:
* エンドポイント 1 は 22K メッセージを 1 分以内に送信します。
* エンドポイント 2 (サガ) は、1 秒あたり 5 ~ 10 のメッセージを処理します。
* 4 分後に最初のタイムアウトが発生しますが、エンドポイント 2 はまだキューからのメッセージを処理しているため、新しい saga インスタンスを作成しています。
* その瞬間から、saga エンドポイントの timeoutsdispatcher キューがメッセージでいっぱいになります。
* 10 分ほど経過すると、timeoutsdispatcher キューにはすでに 170K を超えるメッセージが含まれており、まだいっぱいになっています。
* これは、MSMQ ストレージの制限に達するか、入力キューからのすべてのメッセージが処理されるためにエンドポイント 2 がクラッシュするまで続きます。後者が最初に発生した場合、timeoutsdispatcher キューのメッセージ数が減少し始め、最終的に 0 になります。
nservicebus - 歴史的に完了したサガと同じキーでサガが開始されると、Azure の SecondaryIndexPersister が例外をスローする
Azure Persistance で Sagas を使用します。
ユーザーセッションハンドラーと比較できるサガがあります。そのセッションの一意のキーは、ユーザーの携帯電話番号です。初めてテキスト メッセージを受信すると、その携帯電話番号のサガが作成されます。saga データ レコードとセカンダリ インデックスが Azure Table Storage に作成されます。
しばらくすると、サガは完了としてマークされます。サガ データ エントリは削除されますが、セカンダリ インデックスはテーブル ストレージに残ります。
再び、同じ携帯電話番号からの新しいメッセージがすぐに受信されます。そのモバイル番号のアクティブなサガがないため、新しいインスタンスが作成されます (ただし、おそらくセカンダリ インデックスがまだ存在するため、過去の完了したサガと同じ sagaId を使用します)。サガを開始するメッセージは、次の例外のために処理されません:
もちろん、サガを「実行」したままにし、セッションがアクティブかどうかをサガ データ内に内部フラグを設定することで、この問題を回避できます。しかし、サガの完了時にセカンダリ インデックスが削除されない理由を知りたいですか? 私が忘れたことはありますか?同じ一意のキーを使用してサガの新しいインスタンスを開始するのは悪い設計ですか?
回答/コメントをお寄せいただきありがとうございます。
環境:
- NServiceBus 5.2.4
- NServiceBus.Azure 6.2.4
nservicebus - NserviceBus Sagas ユーティリティ
NserviceBus Sagas に関するこの優れたチュートリアル ( http://blogs.planbsoftware.co.nz/?p=247 ) を読みましたが、データベースやビジネスの使用に対するこのモデル (saga) の利点は何なのかまだわかりません。レイヤー取引?
ravendb - ホスト saga を保持するためのカスタム データベース名
ravenDb を使用して nservicebus ホスト サガを永続化するためにカスタム データベース名 (エンドポイントではない) を使用することは可能ですか?
NServiceBus 3.3 と RavenDB 2.5 を使用しています。そのような方法でエンドポイントを初期化します。
私の App.config には以下が含まれます。
c# - 複数のメッセージの受信によって開始される NServiceBus Saga を設計する方法
2 つ以上のメッセージによって開始される NServiceBus 5.x の Saga の設計に関するヘルプを探しています。これは、サガが単一のメッセージで開始されるのではなく、サガが開始される前にすべてのメッセージが存在する必要があることを意味します。
それがどのように機能するのかよくわかりません。サンプルや例はどこにもありません。
私はいくつかのメッセージで物語が始まるのは全く問題ないと明言している本を何冊か読みました。
私が得られないのは、たとえば、サガを開始するために 3 つのメッセージが必要な場合に、サガがどのように見つかるかということです。サガが「開始」される前に、3 つのメッセージすべてが任意の順序で到着する必要があります。これは属性の選択にどのように影響しますか?[Unique]
例:「StoreID」、「ComputerID」、「UserID」の 3 つの ID によって「一意に」識別される saga が必要です。これら 3 つの ID は、3 つの異なるコマンド 、Message1
、Message2
で到着しますMessage3
。
MySagaData の 3 つのプロパティに [Unique] 属性を設定する必要がありますか?
または、これら 3 つを連結する読み取り専用プロパティを作成する必要がありますか?
到着するMessage1
とMessage3
、物語は開始できません。Message2
不足している。
それから別の人Message1
が到着します。
そしてMessage2
到着。(最初のサーガを完了し、開始できるようにします)
2番目はMessage1
どうですか?
これはどのように処理されますか?