問題タブ [saga]
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.
domain-driven-design - CQRS http アプリケーションに Saga/Process Manager を実装する
次の例: https://msdn.microsoft.com/en-us/library/jj591569.aspx (図 3)
http アプリケーションにどのように適合しますか?
ユーザーは、PlaceOrderCommand を送信する PlaceOrderController に対して http 要求を実行する必要がありますが、注文処理マネージャーはユーザーに「9. 注文が確認されました」とどのように応答するのでしょうか? この情報をユーザーに返すために、コントローラーはどのようにそれを認識していますか?
ありがとう
c# - NServiceBus Saga には IPersistTimeouts コンポーネントが登録されていません
NServiceBus の構成中に次の例外が発生するセルフホット WCF ホスト (IIS) があります。
スローされる例外: NServiceBus.Core.dll の 'Autofac.Core.Registration.ComponentNotRegisteredException'
追加情報: 要求されたサービス 'NServiceBus.Timeout.Core.IPersistTimeouts' は登録されていません。この例外を回避するには、コンポーネントを登録してサービスを提供するか、IsRegistered() を使用してサービス登録を確認するか、ResolveOptional() メソッドを使用してオプションの依存関係を解決します。
インメモリ永続性とMSMQ transportを備えた NSB 5.2.9 を使用しています。
これは、セルフホステッド WCF ホスト (IIS) の構成です。App.config がありません! **これは、global.asax での Autofac 登録後に呼び出されます。
すべてのエンドポイントの設定は、 を介してのみ行われますIProvideConfiguration<>
。
プロジェクトのプロパティでNServiceBus.Liteプロファイルが設定されていますが、違いはありません。
私はNSBを初めて使用し、なぜこれが起こっているのか説明できません. 上記を有効にするメソッドを探していましたIPersistsTimeouts
が、見つかったメソッドはすべて古いものとしてマークされており、機能しません。
編集 #1: @DavidBoike によって要求された機能のダンプ
編集#2:
David の提案を適用し、構成を最小限に抑えた後でも、InMemoryPersistence ではなく MsmqPersistence を使用する場合にのみ例外が発生します。他の永続ストレージは試していません。
この例外は、フル バス (SendOnlyBus ではない) を持つ MVC アプリケーションによってスローされ、次のように構成されます。
例外がスローされました: NServiceBus.Core.dll の 'System.NullReferenceException' 追加情報: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
コール スタック:
ServiceBus.Core.dll!NServiceBus.Timeout.Hosting.Windows.TimeoutPersisterReceiver.Poll(object obj) 90 行目 C#
MVC の Autofac 構成:
繰り返しますが、これは、 Some_Endpoint によって公開されたイベントにサブスクライブするMsmqPersistenceを使用する MVC アプリケーションで発生しています。上記の WCF ホストは、最初にその Some_Endpoint にコマンドを送信します。
rebus - 「saga not found」シナリオへの対処
Rebus には、通常はサガによって処理されるが、相関プロパティに一致する現在のサガがないメッセージを処理するメカニズムはありますか? そのままでは、これらのメッセージは Rebus によって消費されるだけだと思いますが、それらに何が起こるかについての可視性はありません。
つまり、NServiceBus には、IHandleSagaNotFound
エンドポイントがこのシナリオに対処できるようにする機能があります。
c# - MassTransit 3.0 でスキャッター/ギャザー パターンを使用してサガを実装する方法
Jimmy Boagard は、ここでMcDonald のファスト フード チェーンをスキャッター ギャザー パターンと比較して 説明しています。
最初の実装の考え:
すべてのフード ステーションが取得するすべての種類の FoodOrdered イベントに共通のインターフェイスを用意し、各フード ステーションがそれぞれのアイテムを消費/作成して、共通の完了イベントを発行できるようにします。例: フライド ポテトとバーガー ステーションは、フライド ポテトの注文に関するメッセージを受け取ります。フライド ポテト ステーションは、注文を消費します。
最初の懸念事項:
Saga は完了した食品の種類を気にしないので、すべての食品が完了したという事実だけで、これは問題ないように思われます。ただし、ここでキューの共有に関する警告を読んだ後、MassTransit 3.0 で Consumer.Conditional フィルタリングが削除されたことに気づきました。しかし、メッセージのリクエストと応答を作成し、キッチンの各食品のイベントを関連付けることなしに、どのようにそれを行うかはわかりません。例: FriesOrdered、BurgerOrdered FriesCooked、BurgerCooked。キッチンのすべてのアイテムに対してこれを行う必要がある場合、これは非常に面倒ですか?
上記の懸念事項を踏まえると、このタイプのワークフローの良いサガの例はどのようなものでしょうか?
concurrency - NServiceBus - 同じ Saga を使用する 2 つのクラス、それは可能ですか?
通常、Saga<T> を実装する 1 つのクラスを作成します。
MySagaData コード:
ここで、同じ Saga (Saga<MySagaData>) を別のクラスで使用する必要があります。それを MyClass2 と呼びましょう。
次のように MyClass2 を実装すると: public class MyClass2 : Saga<MySagaData> { ……… }
Saga<MySagaData> の ACID プロパティは、Saga<MySagaData> が 1 つのクラスで使用されているかのように、MyClass1 と MyClass2 に存在しますか? また、ACID プロパティには、たとえば、メッセージ ハンドラーをロールバックして MyClass1 で再試行します。他のクラス (MyClass2) の別のメッセージ ハンドラーが MySagaData への変更をコミットした場合はどうなりますか?
cqrs - CQRS佐賀管理
CQRS の原則に基づいて新しいソフトウェアを開発していますが、疑問があります。ユーザーの作成を管理するために Saga を作成しています。各ユーザーには、いくつかの一般的な情報 (名前、姓、生年月日)、いくつかの住所、およびその他のものがあります。「CreateUserSaga」は「CreateUserCommand」によって開始されます。CreateUserCommand が処理された後、同じサガによって処理される "UserCreatedEvent" を発生させたいと考えています。このイベント内で、CreateUserAddress コマンドを送信してアドレスを登録します。私が知らないのは、住所のデータをどこから取得するかです。CreateUserCommand でそれらを送信する必要がありますか?