44

Jimmy Boagard は、ここでMcDonald のファスト フード チェーンをスキャッター ギャザー パターンと比較して 説明しています。

上記の記事から盗んだワークフロー画像:ここに画像の説明を入力

最初の実装の考え:

すべてのフード ステーションが取得するすべての種類の FoodOrdered イベントに共通のインターフェイスを用意し、各フード ステーションがそれぞれのアイテムを消費/作成して、共通の完了イベントを発行できるようにします。例: フライド ポテトとバーガー ステーションは、フライド ポテトの注文に関するメッセージを受け取ります。フライド ポテト ステーションは、注文を消費します。

最初の懸念事項:

Saga は完了した食品の種類を気にしないので、すべての食品が完了したという事実だけで、これは問題ないように思われます。ただし、ここでキューの共有に関する警告を読んだ、MassTransit 3.0 で Consumer.Conditional フィルタリングが削除されたことに気づきました。しかし、メッセージのリクエストと応答を作成し、キッチンの各食品のイベントを関連付けることなしに、どのようにそれを行うかはわかりません。例: FriesOrdered、BurgerOrdered FriesCooked、BurgerCooked。キッチンのすべてのアイテムに対してこれを行う必要がある場合、これは非常に面倒ですか?

上記の懸念事項を踏まえると、このタイプのワークフローの良いサガの例はどのようなものでしょうか?

4

3 に答える 3

-1

完了したイベントを saga にキックバックする際の問題は、共有リソース (つまり、saga 状態) で競合が発生することです。

Jim は、あなたが参照した投稿の後に、問題と解決策の概要を説明した別の投稿を持っています。もちろん、彼は特に NServiceBus について話しているのですが、問題と概念は同じです。

https://lostechies.com/jimmybogard/2014/02/27/reducing-nservicebus-saga-load/

外部ストレージを作成します。作業項目ごとに記録を入れます。サガが遅延メッセージングを使用して効果的にポーリングし、すべての作業が完了したかどうかを確認している間に、各ワーカーが自分の作業を完了に設定できるようにします。

その後、引き続きスキャッター ギャザーを実行しますが、競合を減らすために「アグリゲーター」はプロセス マネージャー パターンに置き換えられています。

于 2017-09-28T17:13:03.673 に答える